博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hiho一下第129周 后缀自动机二·重复旋律6
阅读量:6282 次
发布时间:2019-06-22

本文共 2064 字,大约阅读时间需要 6 分钟。

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

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

描述

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

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

输入

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

输出

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

样例输入
aab
样例输出
211
#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int N=1e6+100;const int M=1e6+5;int tot,slink[2*N],trans[2*N][26],minlen[2*N],maxlen[2*N],edpts[2*N];char str[2*N];int n;int containPrefix[2*N],ind[2*N],ans[2*N+10];int newstate(int _maxlen,int _minlen,int* _trans,int _slink) { maxlen[++tot]=_maxlen; minlen[tot]=_minlen; slink[tot]=_slink; if(_trans) for(int i=0; i<26; i++) trans[tot][i]=_trans[i]; return tot;}int add_char(char ch,int u) { int c=ch-'a',v=u; int z=newstate(maxlen[u]+1,-1,NULL,0); containPrefix[z]=1; while(v&&!trans[v][c]) { trans[v][c]=z; v=slink[v]; } if(!v) { minlen[z]=1; slink[z]=1; ind[0]++; return z; } int x=trans[v][c]; if(maxlen[v]+1==maxlen[x]) { slink[z]=x; minlen[z]=maxlen[x]+1; ind[x]++; return z; } int y=newstate(maxlen[v]+1,-1,trans[x],slink[x]); slink[z]=slink[x]=y; ind[y]+=2; minlen[x]=minlen[z]=maxlen[y]+1; while(v&&trans[v][c]==x) { trans[v][c]=y; v=slink[v]; } minlen[y]=maxlen[slink[y]]+1; return z;}void getEndPtCount() { queue
q; for( int i=1; i <=tot; i++ )if( !ind[i] ) { q.push(i); //edpts[i] = maxlen[i]-minlen[i]; // +1; programming convenient purpose } while( !q.empty() ) { int u = q.front(); q.pop(); if( containPrefix[u] ) edpts[u]++; edpts[ slink[u]] += edpts[u]; if( !--ind[slink[u]] ) q.push(slink[u]); }}int main() { scanf("%s",str); int len=strlen(str),pre=1; tot=1; for(int i=0; i
0;i--){ mm=ans[i]=max(ans[i],mm); } for(int i=1;i<=len;i++)printf("%d\n",ans[i]); return 0;}

 

转载于:https://www.cnblogs.com/jianrenfang/p/6344820.html

你可能感兴趣的文章
PHP 简易留言板制作小实例
查看>>
python之列表、元组、字典
查看>>
linux目录基础知识
查看>>
用户组与权限管理的理解及切换用户相关命令使用
查看>>
vue中使用vue-resource发送ajax请求
查看>>
python join和split和strip用法
查看>>
I/O子零碎的条理构造
查看>>
沉寂许久,来一个工具——supervisor
查看>>
ansible插件之统计任务处理时间
查看>>
新手从Python的哪个版本开始学比较好?
查看>>
linux bash shell中for的用法and示例
查看>>
所有和Java中代理有关的知识点都汇集于此,速进学干货。
查看>>
开机启动的全过程
查看>>
反向教学系列之——PHP入门(一)
查看>>
微会动微信现场互动:会议会展活动运营管理之年会活动管理技巧
查看>>
css规则
查看>>
芯片制造与金融软件开发公司,采用什么样专业数据存储与备份规划方案
查看>>
linux下安装lnmp
查看>>
vue-cli 教程
查看>>
说说用过的几个远程工具
查看>>