后缀自动机三·重复旋律6

时间限制:15000ms
单点时限:3000ms
内存限制:512MB

描述

小Hi平时的一大兴趣爱好就是演奏钢琴。我们知道一个音乐旋律被表示为一段数构成的数列。

现在小Hi想知道一部作品中所有长度为K的旋律中出现次数最多的旋律的出现次数。但是K不是固定的,小Hi想知道对于所有的K的答案。

解题方法提示

输入

共一行,包含一个由小写字母构成的字符串S。字符串长度不超过 1000000。

输出

共Length(S)行,每行一个整数,表示答案。

样例输入
  1. aab
样例输出
  1. 2
  2. 1
  3. 1
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <algorithm>
  6. #include <cmath>
  7. #include <time.h>
  8. #include <string>
  9. #include <map>
  10. #include <stack>
  11. #include <vector>
  12. #include <set>
  13. #include <queue>
  14. using namespace std;
  15. typedef long long ll;
  16. const int inf=0x3f3f3f3f;
  17. const int N=1e6+;
  18. const int M=1e6+;
  19. int tot,slink[*N],trans[*N][],minlen[*N],maxlen[*N],edpts[*N];
  20. char str[*N];
  21. int n;
  22. int containPrefix[*N],ind[*N],ans[*N+];
  23. int newstate(int _maxlen,int _minlen,int* _trans,int _slink) {
  24. maxlen[++tot]=_maxlen;
  25. minlen[tot]=_minlen;
  26. slink[tot]=_slink;
  27. if(_trans)
  28. for(int i=; i<; i++)
  29. trans[tot][i]=_trans[i];
  30. return tot;
  31. }
  32. int add_char(char ch,int u) {
  33. int c=ch-'a',v=u;
  34. int z=newstate(maxlen[u]+,-,NULL,);
  35. containPrefix[z]=;
  36. while(v&&!trans[v][c]) {
  37. trans[v][c]=z;
  38. v=slink[v];
  39. }
  40. if(!v) {
  41. minlen[z]=;
  42. slink[z]=;
  43. ind[]++;
  44. return z;
  45. }
  46. int x=trans[v][c];
  47. if(maxlen[v]+==maxlen[x]) {
  48. slink[z]=x;
  49. minlen[z]=maxlen[x]+;
  50. ind[x]++;
  51. return z;
  52. }
  53. int y=newstate(maxlen[v]+,-,trans[x],slink[x]);
  54. slink[z]=slink[x]=y;
  55. ind[y]+=;
  56. minlen[x]=minlen[z]=maxlen[y]+;
  57. while(v&&trans[v][c]==x) {
  58. trans[v][c]=y;
  59. v=slink[v];
  60. }
  61. minlen[y]=maxlen[slink[y]]+;
  62. return z;
  63. }
  64. void getEndPtCount() {
  65. queue<int> q;
  66. for( int i=; i <=tot; i++ )if( !ind[i] ) {
  67. q.push(i);
  68. //edpts[i] = maxlen[i]-minlen[i]; // +1; programming convenient purpose
  69. }
  70. while( !q.empty() ) {
  71. int u = q.front();
  72. q.pop();
  73. if( containPrefix[u] ) edpts[u]++;
  74. edpts[ slink[u]] += edpts[u];
  75. if( !--ind[slink[u]] ) q.push(slink[u]);
  76. }
  77. }
  78.  
  79. int main() {
  80. scanf("%s",str);
  81. int len=strlen(str),pre=;
  82. tot=;
  83. for(int i=; i<len; i++) {
  84. pre=add_char(str[i],pre);
  85. }
  86. getEndPtCount();
  87. for(int i=;i<=tot;i++){
  88. ans[maxlen[i]] = max(ans[maxlen[i]],edpts[i]);
  89. }
  90. int mm=;
  91. for(int i=tot;i>;i--){
  92. mm=ans[i]=max(ans[i],mm);
  93. }
  94. for(int i=;i<=len;i++)printf("%d\n",ans[i]);
  95. return ;
  96. }

hiho一下第129周 后缀自动机二·重复旋律6的更多相关文章

  1. hiho一下第128周 后缀自动机二·重复旋律5

    #1445 : 后缀自动机二·重复旋律5 时间限制:10000ms 单点时限:2000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...

  2. hiho一下第131周 后缀自动机二·重复旋律8(循环相似子串)

    后缀自动机五·重复旋律8 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成的数列. 小Hi ...

  3. hiho一下第130周 后缀自动机二·重复旋律7

    后缀自动机四·重复旋律7 时间限制:15000ms 单点时限:3000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成的数列. 神奇的 ...

  4. hihoCoder #1445 : 后缀自动机二·重复旋律5

    #1445 : 后缀自动机二·重复旋律5 时间限制:10000ms 单点时限:2000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...

  5. hihoCoder_1445_后缀自动机二·重复旋律5

    #1445 : 后缀自动机二·重复旋律5 时间限制:10000ms 单点时限:2000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...

  6. hiho一下121周 后缀数组二·重复旋律2

    后缀数组二·重复旋律2 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成的数列.小Hi ...

  7. 【后缀自动机】hihocoder1445 后缀自动机二·重复旋律5

    解题方法提示 小Hi:本周的题目其实就是给定一个字符串S,要求出S的所有不同子串的数目.小Ho你知道如何快速求解么? 小Ho:我们最近在讨论后缀自动机,所以肯定是和后缀自动机有关!根据上周学习的SAM ...

  8. hihocoder1445 后缀自动机二·重复旋律5

    传送门:http://hihocoder.com/problemset/problem/1445 [题解] 大概看了一天的后缀自动机,总算懂了一些 这篇文章写的非常好,诚意安利:Suffix Auto ...

  9. hihocoder 后缀自动机二·重复旋律5

    求不同子串个数 裸的后缀自动机 #include<cstring> #include<cmath> #include<iostream> #include<a ...

随机推荐

  1. katalon系列二:selenium IDE的替代者——Katalon Recorder

    Katalon Recorder是和selenium IDE一样的一个浏览器插件,可以录制web上的操作并回放,但我个人感觉Katalon Recorder更好用.大家可以直接在chrome商店下载安 ...

  2. 1094 The Largest Generation (25 分)(树的遍历)

    求结点最多的一层 输出该层的结点个数以及层号 #include<bits/stdc++.h> using namespace std; vector<]; map<int,in ...

  3. django的聚合函数和aggregate、annotate方法使用

    支持聚合函数的方法: 提到聚合函数,首先我们要知道的就是这些聚合函数是不能在django中单独使用的,要想在django中使用这些聚合函数,就必须把这些聚合函数放到支持他们的方法内去执行.支持聚合函数 ...

  4. hadoop +streaming 排序总结

    参考http://blog.csdn.net/baidu_zhongce/article/details/49210787 hadoop用于对key的排序和分桶的设置选项比较多,在公司中主要以KeyF ...

  5. 团队Alpha版本冲刺(四)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:何家伟 组员8:政演 组员9:鸿杰 组员10:刘一好 组员:何宇恒 展示组内最新 ...

  6. A公司 推荐算法大赛 总结

    一.介绍 ♦通过用户前四个月(04.15~08.15)的用户行为预测用户第五个月(08.15~09.15)将会购买的品牌.用户共有四种行为(type)分别是:点击(0).购买(1).购物车(2).收藏 ...

  7. CF 1103B Game with modulo

    题目 $a, x$ 是正整数.显然有 \begin{aligned} x \ge 2x \pmod{a} \implies a \le 2x \end{aligned} 若 $x \le a$ 则 \ ...

  8. eclipse内存不够

    在使用Eclipse的Build Project功能时,提示以下错误: An internal error occurred during: “Build Project”. GC overhead ...

  9. bzoj [Noi2008] 1061 志愿者招募 单纯形

    [Noi2008]志愿者招募 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 5437  Solved: 3267[Submit][Status][Di ...

  10. Mysql大数据备份及恢复

    <p>[引自攀岩人生的博客]MySQL备份一般采取全库备份.日志备份;MySQL出现故障后可以使用全备份和日志备份将数据恢复到最后一个二进制日志备份前的任意位置或时间;mysql的二进制日 ...