4516: [Sdoi2016]生成魔咒

题意:询问一个字符串每个前缀有多少不同的子串


做了一下SDOI2016R1D2,题好水啊随便AK

强行开map上SAM
每个状态的贡献就是\(Max(s)-Min(s)+1\)
插入的时候维护一下就行了

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
using namespace std;
typedef long long ll;
#define fir first
#define sec second
const int N=3e5+5, P=1e9+7;
inline int read() {char c=getchar(); int x=0, f=1;while(c<'0' || c>'9') {if(c=='-')f=-1; c=getchar();}while(c>='0' && c<='9') {x=x*10+c-'0'; c=getchar();}return x*f;
}int n, s[N]; ll ans;
struct meow { map<int, int> ch; int par, val;}t[N];
int sz=1, root=1, last=1;
void extend(int c) {int p=last, np=++sz;t[np].val = t[p].val+1;for(; p && !t[p].ch[c]; p=t[p].par) t[p].ch[c]=np;if(!p) t[np].par = root;else {int q=t[p].ch[c];if(t[q].val == t[p].val+1) t[np].par=q;else {ans -= t[q].val - t[p].val;int nq=++sz; t[nq]=t[q]; t[nq].val = t[p].val+1;t[q].par = t[np].par = nq;ans += t[q].val - t[nq].val; ans ++;for(; p && t[p].ch[c]==q; p=t[p].par) t[p].ch[c] = nq;}}ans+=t[np].val - t[t[np].par].val;last=np;
}
int main() {//freopen("in","r",stdin);freopen("incantation.in","r",stdin);freopen("incantation.out","w",stdout);n=read();for(int i=1; i<=n; i++) {s[i]=read();extend(s[i]);printf("%lld\n",ans);}
}

转载于:https://www.cnblogs.com/candy99/p/6652757.html

BZOJ 4516: [Sdoi2016]生成魔咒 [后缀自动机]相关推荐

  1. BZOJ.4516.[SDOI2016]生成魔咒(后缀自动机 map)

    题目链接 后缀数组做法见这. 直接SAM+map.对于每个节点其产生的不同子串数为len[i]-len[fa[i]]. //15932kb 676ms #include <map> #in ...

  2. 洛谷 P4070 [SDOI2016]生成魔咒 后缀自动机

    题目描述 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例如 S=[1, ...

  3. 【刷题】BZOJ 4516 [Sdoi2016]生成魔咒

    Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例 ...

  4. BZOJ 4516 [Sdoi2016] 生成魔咒

    传送门 心态崩了++ 后缀自动机板子题[考场上要是不会后缀自动机就崩了T^T] 可以看出 每次答案的贡献就是和原来本质不同的子串数量 根据SPOJ7258我们可以得到 本质不同的子串数量可以通过建出自 ...

  5. bzoj4516 / P4070 [SDOI2016]生成魔咒

    P4070 [SDOI2016]生成魔咒 后缀自动机 每插入一个字符,对答案的贡献为$len[last]-len[fa[last]]$ 插入字符范围过大,所以使用$map$存储. (去掉第35行就是裸 ...

  6. [SDOI2016]生成魔咒

    4516: [Sdoi2016]生成魔咒 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1460  Solved: 835 [Submit][Sta ...

  7. BZOJ4516: [Sdoi2016]生成魔咒

    BZOJ4516: [Sdoi2016]生成魔咒 Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示. 例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒 ...

  8. P4070 [SDOI2016]生成魔咒

    P4070 [SDOI2016]生成魔咒 题意: 有n个字符xi,每次在S的末尾加入一个字符,(一开始S为空),每次加入xi后的不相同字串有多少个 题解: 做这个题首先要会后缀数组P3809 [模板] ...

  9. P4070 [SDOI2016]生成魔咒(SAM len数组的含义)

    [SDOI2016]生成魔咒 题目描述 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1 , 2 1,2 1,2 拼凑起来形成一个魔咒串 [ 1 , 2 ] [1,2] [1, ...

最新文章

  1. MinkowskiEngine基准测试
  2. Notepad++支持jQuery、html5、css3
  3. 比较字符串a和b的大小
  4. 2010 模板下载 罗斯文_俄罗斯签证办理攻略
  5. 从 Windows 切换到 Mac,这些不能错过的 Tips
  6. c++重载、覆盖和隐藏
  7. IP,TCP 和 HTTP
  8. Ajax 加载数据 练习 自我有些迷糊了,写的大概请谅解 ^ _ ^
  9. Java实现Modbus/TCP客户端与modsim通信
  10. 用国产编程语言CBrother做微信公众号后台开发太简单
  11. 彻底永久禁止Win10自动更新工具Windows Update Blocker v1.6 汉化版
  12. 雷电2接口_Steinberg 发布旗舰级 32 bit / 384 kHz 雷电 2 音频接口 AXR4
  13. 深度解析京东个性化推荐系统演进史
  14. 最短路径系列【最短路径、哈密顿路等】
  15. Python数据分析与挖掘——回归模型的假设检验
  16. 思科模拟器-利用VTP管理VLAN
  17. 饿了吗html模板,饿了么.html
  18. 使用pip/pip3安装第三方模块,出现Cannot unpack file xxx的问题的解决以及pip安装速度慢或出现readtime out问题的解决。
  19. 计算机键盘灯不亮原因,键盘上的三个灯不亮?竟是这个原因
  20. 美国漫画历程的阳光面与阴暗面 | 经济学人全球早报精选

热门文章

  1. 查看docker容器日志
  2. 盘点最著名的10位伟大的程序员
  3. Shell脚本中函数返回值的用法笔记
  4. python200行代码_如何用200行Python代码“换脸”
  5. html 圆球的百分比,HTML5 很酷的球形器皿中水波状的进度条
  6. html5和c3属性,H5与C3不得不说的知识点
  7. 现在学前端还来得及吗?总听人说饱和了
  8. Nginx+httpd反代实现动静分离
  9. MySQL-8.0.12源码安装实例
  10. 获取2个地址之间的距离(高德API)