BZOJ 4516: [Sdoi2016]生成魔咒 [后缀自动机]
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]生成魔咒 [后缀自动机]相关推荐
- BZOJ.4516.[SDOI2016]生成魔咒(后缀自动机 map)
题目链接 后缀数组做法见这. 直接SAM+map.对于每个节点其产生的不同子串数为len[i]-len[fa[i]]. //15932kb 676ms #include <map> #in ...
- 洛谷 P4070 [SDOI2016]生成魔咒 后缀自动机
题目描述 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例如 S=[1, ...
- 【刷题】BZOJ 4516 [Sdoi2016]生成魔咒
Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例 ...
- BZOJ 4516 [Sdoi2016] 生成魔咒
传送门 心态崩了++ 后缀自动机板子题[考场上要是不会后缀自动机就崩了T^T] 可以看出 每次答案的贡献就是和原来本质不同的子串数量 根据SPOJ7258我们可以得到 本质不同的子串数量可以通过建出自 ...
- bzoj4516 / P4070 [SDOI2016]生成魔咒
P4070 [SDOI2016]生成魔咒 后缀自动机 每插入一个字符,对答案的贡献为$len[last]-len[fa[last]]$ 插入字符范围过大,所以使用$map$存储. (去掉第35行就是裸 ...
- [SDOI2016]生成魔咒
4516: [Sdoi2016]生成魔咒 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1460 Solved: 835 [Submit][Sta ...
- BZOJ4516: [Sdoi2016]生成魔咒
BZOJ4516: [Sdoi2016]生成魔咒 Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示. 例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒 ...
- P4070 [SDOI2016]生成魔咒
P4070 [SDOI2016]生成魔咒 题意: 有n个字符xi,每次在S的末尾加入一个字符,(一开始S为空),每次加入xi后的不相同字串有多少个 题解: 做这个题首先要会后缀数组P3809 [模板] ...
- P4070 [SDOI2016]生成魔咒(SAM len数组的含义)
[SDOI2016]生成魔咒 题目描述 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1 , 2 1,2 1,2 拼凑起来形成一个魔咒串 [ 1 , 2 ] [1,2] [1, ...
最新文章
- MinkowskiEngine基准测试
- Notepad++支持jQuery、html5、css3
- 比较字符串a和b的大小
- 2010 模板下载 罗斯文_俄罗斯签证办理攻略
- 从 Windows 切换到 Mac,这些不能错过的 Tips
- c++重载、覆盖和隐藏
- IP,TCP 和 HTTP
- Ajax 加载数据 练习 自我有些迷糊了,写的大概请谅解 ^ _ ^
- Java实现Modbus/TCP客户端与modsim通信
- 用国产编程语言CBrother做微信公众号后台开发太简单
- 彻底永久禁止Win10自动更新工具Windows Update Blocker v1.6 汉化版
- 雷电2接口_Steinberg 发布旗舰级 32 bit / 384 kHz 雷电 2 音频接口 AXR4
- 深度解析京东个性化推荐系统演进史
- 最短路径系列【最短路径、哈密顿路等】
- Python数据分析与挖掘——回归模型的假设检验
- 思科模拟器-利用VTP管理VLAN
- 饿了吗html模板,饿了么.html
- 使用pip/pip3安装第三方模块,出现Cannot unpack file xxx的问题的解决以及pip安装速度慢或出现readtime out问题的解决。
- 计算机键盘灯不亮原因,键盘上的三个灯不亮?竟是这个原因
- 美国漫画历程的阳光面与阴暗面 | 经济学人全球早报精选