bzoj4516 / P4070 [SDOI2016]生成魔咒
P4070 [SDOI2016]生成魔咒
后缀自动机
每插入一个字符,对答案的贡献为$len[last]-len[fa[last]]$
插入字符范围过大,所以使用$map$存储。
(去掉第35行就是裸的板子了。)
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cctype> 5 #include<map> 6 using namespace std; 7 void read(int &x){ 8 static char c=getchar();x=0; 9 while(!isdigit(c)) c=getchar(); 10 while(isdigit(c)) x=x*10+(c^48),c=getchar(); 11 } 12 #define N 100005 13 long long ans; 14 struct Sam{ 15 int fa[N<<1],len[N<<1]; 16 int last,ed,p,q; 17 map <int,int> nxt[N<<1]; 18 Sam(){last=ed=1;} 19 void init(){ 20 int n,c; read(n); 21 while(n--) read(c),add(c),printf("%lld\n",ans); 22 } 23 void add(int c){ 24 p=last; len[last=++ed]=len[p]+1; 25 for(;p&&!nxt[p][c];p=fa[p]) nxt[p][c]=ed; 26 if(!p) fa[ed]=1; 27 else{ 28 q=nxt[p][c]; 29 if(len[q]==len[p]+1) fa[ed]=q; 30 else{ 31 len[++ed]=len[p]+1; nxt[ed]=nxt[q]; 32 fa[ed]=fa[q]; fa[q]=fa[ed-1]=ed; 33 for(;nxt[p][c]==q;p=fa[p]) nxt[p][c]=ed; 34 } 35 }ans+=len[last]-len[fa[last]];//对答案的贡献 36 } 37 }sam; 38 int main(){sam.init(); return 0;}
转载于:https://www.cnblogs.com/kafuuchino/p/10220793.html
bzoj4516 / P4070 [SDOI2016]生成魔咒相关推荐
- P4070 [SDOI2016]生成魔咒
P4070 [SDOI2016]生成魔咒 题意: 有n个字符xi,每次在S的末尾加入一个字符,(一开始S为空),每次加入xi后的不相同字串有多少个 题解: 做这个题首先要会后缀数组P3809 [模板] ...
- 洛谷 P4070 [SDOI2016]生成魔咒 解题报告
P4070 [SDOI2016]生成魔咒 题目描述 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 \(1\).\(2\) 拼凑起来形成一个魔咒串 \([1,2]\). 一个魔咒 ...
- P4070 [SDOI2016]生成魔咒(SAM len数组的含义)
[SDOI2016]生成魔咒 题目描述 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1 , 2 1,2 1,2 拼凑起来形成一个魔咒串 [ 1 , 2 ] [1,2] [1, ...
- 洛谷 P4070 [SDOI2016]生成魔咒 后缀自动机
题目描述 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例如 S=[1, ...
- luogu P4070 [SDOI2016]生成魔咒
首先有两个结论: 1.后缀自动机具有最简性,即每种不同的子串只会在sam上体现一次,体现形式是sam上一条由root出发的路径. 2.一个字符串不同子串的个数等于所有关键节点的max(x)-min(x ...
- P4070 [SDOI2016]生成魔咒(SAM)
传送门 用后缀数组做的真的心累 后缀数组+ST表+反串思维+set(或平衡树)动态维护 h e i g h t height height数组 然后用 S A M SAM SAM就是模板题- 要求本质 ...
- BZOJ4516: [Sdoi2016]生成魔咒
BZOJ4516: [Sdoi2016]生成魔咒 Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示. 例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒 ...
- [SDOI2016]生成魔咒
4516: [Sdoi2016]生成魔咒 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1460 Solved: 835 [Submit][Sta ...
- BZOJ 4516: [Sdoi2016]生成魔咒 [后缀自动机]
4516: [Sdoi2016]生成魔咒 题意:询问一个字符串每个前缀有多少不同的子串 做了一下SDOI2016R1D2,题好水啊随便AK 强行开map上SAM 每个状态的贡献就是\(Max(s)-M ...
最新文章
- Windows App开发之集成设置、帮助、搜索和共享
- c语言奇数阶换房,(完整版)C语言酒店管理系统.docx
- BZOJ 1631: [Usaco2007 Feb]Cow Party【最短路】
- nssl1470-X【并查集,素数】
- 使用镜像源安装EASY_INSTALL和PIP教程
- Emmet的html语法
- 通过cmd和npm指令,快速引入element-ui组件
- RAID及LVM,iscsi
- python开发面试笔试题_python集合面试笔试题
- The history and design philosophy of Spring
- 95-40-050-java.util.concurrent-CopyOnWriteArraySet
- Flink SQL实时数仓开源UI平台
- 哈夫曼树的生成详解(C++)
- vs工程 vcproj和开发环境定义宏
- java中的常用语句
- 个税计算、税基的处理
- 【UOJ449】【集训队作业2018】喂鸽子(概率DP)
- JavaProperties文件操作
- 02网络爬虫-使用 Beautiful Soup 解析网页
- 微信小程序等第三方应用接入易班的api
热门文章
- 自己记录一下,多卡改单卡
- mysql out of memory 解决_mysqld-nt: Out of memory (Needed 1677720 bytes)解决方法
- 思维方式才是你职业瓶颈期的根本原因
- 【技术】解决Maven创建web工程web.xml版本过低的问题,妈妈再也不用的担心我的学习了
- SQL 连接(Join )
- 互联网公司很年轻?拼多多、字节人均年龄27岁,阿里31岁...
- BC26 NB-IoT模组MQTT通信测试(通信猫)
- strongswan libipsec
- 一些Markdown编辑器
- 超声检测的A扫描、B扫描、C扫描