spoj7258:Lexicographical Substring Search 后缀自动机
来源:互联网 发布:微信广告植入系统源码 编辑:程序博客网 时间:2024/05/19 04:28
经典题,找不重复字典序第
先跑出SAM,然后在SAM上DP。
因为从SAM的起点跑可以跑出所有的子串,所以我们用
然后每次按照
如果求重复字典序第
#include<iostream>#include<cstdio>#include<cstring>#define N 200005using namespace std;char s[N];int last,S,n,cnt,Q;int fa[N],len[N],ch[N][26],f[N],cc[N],q[N];inline int read(){ int a=0,f=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();} while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();} return a*f;}inline void insert(int c){ int p=last,np=last=++cnt; len[np]=len[p]+1; while (p&&!ch[p][c]) ch[p][c]=np,p=fa[p]; if (!p) fa[np]=S; else { int q=ch[p][c]; if (len[q]==len[p]+1) fa[np]=q; else { int nq=++cnt; memcpy(ch[nq],ch[q],sizeof(ch[q])); len[nq]=len[p]+1; fa[nq]=fa[q]; fa[q]=fa[np]=nq; while (p&&ch[p][c]==q) ch[p][c]=nq,p=fa[p]; } }}void query(){ int p=1,x=read(); while (x) { for (int i=0;i<26;i++) if (ch[p][i]) { if (f[ch[p][i]]>=x) { putchar('a'+i); p=ch[p][i]; x--; break; } else x-=f[ch[p][i]]; } } puts("");}int main(){ last=S=++cnt; scanf("%s",s+1); n=strlen(s+1); for (int i=1;i<=n;i++) insert(s[i]-'a'); for (int i=1;i<=cnt;i++) ++cc[len[i]]; for (int i=1;i<=cnt;i++) cc[i]+=cc[i-1]; for (int i=1;i<=cnt;i++) q[cc[len[i]]--]=i; for (int i=cnt;i;i--) { f[q[i]]=1; for (int j=0;j<26;j++) f[q[i]]+=f[ch[q[i]][j]]; } Q=read(); while (Q--) query(); return 0;}
0 0
- spoj7258 Lexicographical Substring Search(SUBLEX) 后缀自动机
- [spoj7258]Lexicographical Substring Search && 后缀自动机
- spoj7258:Lexicographical Substring Search 后缀自动机
- 【SPOJ7258】Lexicographical Substring Search-后缀自动机+拓补序递推
- spoj7258 Lexicographical Substring Search(SUBLEX),后缀自动机
- [SPOJ7258]SUBLEX - Lexicographical Substring Search(后缀自动机)
- spoj7258:Lexicographical Substring Search(后缀自动机+拓扑排序)
- [SPOJ7258]SUBLEX - Lexicographical Substring Search
- spoj 7258 Lexicographical Substring Search (后缀自动机)
- SPOJ Lexicographical Substring Search --后缀自动机
- SPOJ SUBLEX Lexicographical Substring Search 后缀自动机
- 【后缀自动机】[SPOJ SUBLEX]Lexicographical Substring Search
- SPOJ Lexicographical Substring Search 后缀自动机
- spoj 7258 Lexicographical Substring Search(后缀数组 | 后缀自动机)
- spoj 7258 Lexicographical Substring Search (后缀自动机+dp)
- SPOJ 7258 SUBLEX - Lexicographical Substring Search (后缀自动机)
- SPOJ 题目7528 SUBLEX - Lexicographical Substring Search(后缀自动机求排名k的子串)
- SPOJ SUBLEX Lexicographical Substring Search
- 访问assets中文件各种文件的方法
- 数据格式化函数
- 韩文歌曲音译
- 升级win10后 MarkdownPad 2 无法实时渲染HTML页面问题
- Java-动态传参调用kettle转换和作业
- spoj7258:Lexicographical Substring Search 后缀自动机
- 使用ObjectMapper 序列化Json
- 第4周项目1-求最大公约数
- 行测材料分析公式总结
- 线程与进程区别
- 蓝桥杯 第七届 C/C++ B 省赛 凑算式
- 第四周 项目二 太乐了
- “Unable to install breakpoint due to missing line number attributes,Modify compiler options togenera
- DRM in Android