题意

给出一个字符串,要你找出所有长度的子串分别的最多出现次数。

分析

我们建出后缀自动机,然后预处理出每个状态的cnt,cnt[u]指的是u这个状态的right集合大小。我们设f[len]为长度为len的子串的最多出现次数。我们对于自动机的每个状态都更新f,f[st[u].len]=max(f[st[u].len],cnt[u])。然后这样更新完以后,可以神奇的dp一下。f[len]=max(f[len],f[len+1]).想想为什么?

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream> using namespace std;
const int maxn=+;
char s[maxn];
int n;
struct state{
int len,link;
int ch[];
}st[maxn*];
int sz,last,cur,cnt[*maxn],c[*maxn],f[maxn];
void init(){
cur=last=;
sz=;
st[].link=-;
st[].len=;
memset(st[].ch,-,sizeof(st[].ch));
}
void build_sam(int c){
cur=sz++;
st[cur].len=st[last].len+;
cnt[cur]=;
memset(st[cur].ch,-,sizeof(st[cur].ch));
int p;
for(p=last;p!=-&&st[p].ch[c]==-;p=st[p].link)
st[p].ch[c]=cur;
if(p==-)
st[cur].link=;
else{
int q=st[p].ch[c];
if(st[q].len==st[p].len+)
st[cur].link=q;
else{
int clone=sz++;
st[clone].len=st[p].len+;
st[clone].link=st[q].link;
for(int i=;i<;i++)
st[clone].ch[i]=st[q].ch[i];
for(;p!=-&&st[p].ch[c]==q;p=st[p].link)
st[p].ch[c]=clone;
st[q].link=st[cur].link=clone;
}
}
last=cur;
}
int cmp(int a,int b){
return st[a].len>st[b].len;
}
int main(){
scanf("%s",s);
n=strlen(s);
init();
for(int i=;i<n;i++)
build_sam(s[i]-'a');
for(int i=;i<sz;i++)
c[i]=i;
sort(c,c+sz,cmp);
// for(int i=0;i<sz;i++){
// printf("%d\n",st[i].link);
// }
// printf("!!\n"); for(int i=;i<sz;i++){
int o=c[i];
cnt[st[o].link]+=cnt[o];
}
// for(int i=0;i<sz;i++)
// printf("%d ",cnt[i]);
// printf("\n"); for(int i=;i<sz;i++)
f[st[i].len]=max(f[st[i].len],cnt[i]);
for(int i=n-;i>=;i--)
f[i]=max(f[i],f[i+]);
for(int i=;i<=n;i++){
printf("%d\n",f[i]);
}
return ;
}

最新文章

  1. 【Android进阶学习】shape和selector的结合使用(转)
  2. maven导入本地jar包
  3. 【C语言学习趣事】_32_平胸的尴尬,嫁不出去的姑娘
  4. win10中文简体繁体切换快捷键
  5. curl Protocol &#39;http not supported or disabled in libcurl
  6. sv_target_output dx11
  7. 什么是C#,.NET,ASP.NET?
  8. Ajax基础知识(二)
  9. 前端总结&#183;基础篇&#183;JS(一)五大数据类型之字符串(String)
  10. 论文翻译:Neural Networks With Few Multiplications
  11. 设计模式—装饰模式的C++实现
  12. getQueryStringByName url参数/
  13. 20155324 2016-2017-2 《Java程序设计》第1周学习总结
  14. HBuilder ,及自用主题
  15. PostgreSQL+PostGIS安装以及使用
  16. wordvec_词的相似度
  17. Asp.Net Core MVC控制器和视图之间传值
  18. win环境下使用sqlmap写shell + MYSQL提权(默认就是system权限)
  19. 十七、dbms_tts(检查表空间集合是否是自包含)
  20. css3 hover效果

热门文章

  1. 如何查看你的 FastAdmin 服务器是否开启了 gzip br 压缩
  2. 相关TableLayoutPanel分页显示自定义控件
  3. c# 启动关闭sql服务
  4. textArea中的maxlength是无效的 解决办法
  5. cocos2d-x的popScene的动画效果
  6. Linux的POSIX线程属性
  7. NAT功能测试
  8. apktool重新打包错误
  9. POJ 3061 Subsequence(尺取法)
  10. EF中创建、使用Oracle数据库的Sequence(序列)功能