传送门

解题思路

  首先建出\(sam\),然后把\(siz\)集合通过拓扑排序算出来。对于每个点只更新它的\(maxlen\),然后再从大到小\(dp\)一次就行了。因为\(f[maxlen-1]>=f[maxlen]\)这个性质。

代码

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. using namespace std;
  6. const int MAXN = 250005;
  7. inline int max(int x,int y){
  8. return x>y?x:y;
  9. }
  10. void out(int x){
  11. if(!x) return;out(x/10);putchar('0'+x%10);
  12. }
  13. inline void OUT(int x){
  14. if(!x) putchar('0');
  15. else out(x);
  16. putchar('\n');
  17. }
  18. char s[MAXN];
  19. int n,lst,cnt,l[MAXN<<1],siz[MAXN<<1],fa[MAXN<<1],ch[MAXN<<1][27];
  20. int a[MAXN<<1],c[MAXN<<1],f[MAXN];
  21. inline void Insert(int c){
  22. int p=lst,np=++cnt;lst=np;l[np]=l[p]+1;
  23. for(;p && !ch[p][c];p=fa[p]) ch[p][c]=np;
  24. if(!p) fa[np]=1;
  25. else {
  26. int q=ch[p][c];
  27. if(l[q]==l[p]+1) fa[np]=q;
  28. else {
  29. int nq=++cnt;l[nq]=l[p]+1;
  30. memcpy(ch[nq],ch[q],sizeof(ch[q]));
  31. fa[nq]=fa[q];fa[q]=fa[np]=nq;
  32. for(;ch[p][c]==q;p=fa[p]) ch[p][c]=nq;
  33. }
  34. }
  35. siz[np]=1;
  36. }
  37. int main(){
  38. scanf("%s",s+1);lst=cnt=1;
  39. n=strlen(s+1);
  40. for(int i=1;i<=n;i++) Insert(s[i]-'a'+1);
  41. for(int i=1;i<=cnt;i++) c[l[i]]++;
  42. for(int i=1;i<=cnt;i++) c[i]+=c[i-1];
  43. for(int i=1;i<=cnt;i++) a[c[l[i]]--]=i;
  44. for(int i=cnt;i;i--){
  45. int p=a[i];siz[fa[p]]+=siz[p];
  46. f[l[p]]=max(f[l[p]],siz[p]);
  47. }
  48. for(int i=n-1;i;i--) f[i]=max(f[i],f[i+1]);
  49. for(int i=1;i<=n;i++) OUT(f[i]);
  50. return 0;
  51. } /////

SP8222 NSUBSTR - Substrings(后缀自动机+dp)的更多相关文章

  1. SPOJ NSUBSTR Substrings 后缀自动机

    人生第一道后缀自动机,总是值得纪念的嘛.. 后缀自动机学了很久很久,先是看CJL的论文,看懂了很多概念,关于right集,关于pre,关于自动机的术语,关于为什么它是线性的结点,线性的连边.许多铺垫的 ...

  2. ●SPOJ 8222 NSUBSTR–Substrings(后缀自动机)

    题链: http://www.spoj.com/problems/NSUBSTR/ 题解: 后缀自动机的水好深啊!懂不了相关证明,带着结论把这个题做了.看来这滩深水要以后再来了. 本题要用到一个叫 R ...

  3. SPOJ8222 NSUBSTR - Substrings(后缀自动机)

    You are given a string S which consists of 250000 lowercase latin letters at most. We define F(x) as ...

  4. SPOJ NSUBSTR Substrings ——后缀自动机

    建后缀自动机 然后统计次数,只需要算出right集合的大小即可, 然后更新f[l[i]]和rit[i]取个max 然后根据rit集合短的一定包含长的的性质,从后往前更新一遍即可 #include &l ...

  5. SPOJ8222 Substrings( 后缀自动机 + dp )

    题目大意:给一个字符串S,令F(x)表示S的所有长度为x的子串中,出现次数的最大值.F(1)..F(Length(S)) 建出SAM, 然后求出Right, 求Right可以按拓扑序dp..Right ...

  6. SPOJ8222 NSUBSTR - Substrings 后缀自动机_动态规划

    讲起来不是特别好讲.总之,如果 $dp[i+1]>=dp[i]$,故$dp[i]=max(dp[i],dp[i+1])$ Code: #include <cstdio> #inclu ...

  7. 【bzoj3998】[TJOI2015]弦论 后缀自动机+dp

    题目描述 对于一个给定长度为N的字符串,求它的第K小子串是什么. 输入 第一行是一个仅由小写英文字母构成的字符串S 第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个.T=1则表示不同位置 ...

  8. 【SPOJ -NSUBSTR】Substrings 【后缀自动机+dp】

    题意 给出一个字符串,要你找出所有长度的子串分别的最多出现次数. 分析 我们建出后缀自动机,然后预处理出每个状态的cnt,cnt[u]指的是u这个状态的right集合大小.我们设f[len]为长度为l ...

  9. Substrings SPOJ - NSUBSTR (后缀自动机)

    Substrings \[ Time Limit: 100ms\quad Memory Limit: 1572864 kB \] 题意 给出一个长度为 \(250000\) 的字符串,求出所有 \(x ...

随机推荐

  1. parse_str()函数怎么用?

    php parse_str()函数 语法 parse_str()函数怎么用? php parse_str()函数表示将字符串解析成多个变量,语法是parse_str(string,array),如果未 ...

  2. OC学习篇之---KVC和KVO操作

    前一篇文章我们介绍了OC中最常用的文件操作:http://blog.csdn.net/jiangwei0910410003/article/details/41875015,那么今天来看一下OC中的一 ...

  3. paper 138:qt安装及问题解决

    学习了很久的QT,遇到很多很多的问题,下面总结一下安装过程中遇到的问题吧, 1 下载QT 1)进入官网:https://www.qt.io/ 2)点击Download:https://www.qt.i ...

  4. 升级到Xcode 5.1和iOS 7遇到的各种问题及解决办法汇总:

    <iOS 企业证书部署无效的问题>:http://t.cn/8s7ILWZ <clipsToBounds 属性默认值变了>:http://weibo.com/165881473 ...

  5. 【从0到1,搭建Spring Boot+RESTful API+Shiro+Mybatis+SQLServer权限系统】03、创建RESTful API,并统一处理返回值

    本节应用Spring对RESTful的支持,使用了如@RestController等注解实现RESTful控制器. 如果对Spring中的RESTful不太明白,请查看相关书籍 1.创建一个数据对象, ...

  6. Python进阶:set和dict/对象引用、可变性和垃圾回收/元类编程/迭代器和生成器

    frozenset:不可变集合,无序,不重复 dict上的特性: 1. dict的key或者set的值 都必须是可以hash的(不可变对象 都是可hash的, str, fronzenset, tup ...

  7. 【git】git的内部原理

    参考文章:https://zhuanlan.zhihu.com/p/96631135 参考文章:https://marklodato.github.io/visual-git-guide/index- ...

  8. Area--->AreaRegister.RegisterAllArea()与Area区域的解析

    文章引导 MVC路由解析---IgnoreRoute MVC路由解析---MapRoute MVC路由解析---UrlRoutingModule Area的使用 Area--->AreaRegi ...

  9. PAT_A1100#Mars Numbers

    Source: PAT A1100 Mars Numbers (20 分) Description: People on Mars count their numbers with base 13: ...

  10. activiti7组任务测试

    package com.zcc.activiti05; import org.activiti.engine.*;import org.activiti.engine.repository.Deplo ...