hdu 1358——Period
来源:互联网 发布:插排选购知乎 编辑:程序博客网 时间:2024/06/07 19:07
题意:找到一个字符串的循环节
思路:这道题竟然是训练指南上的例题。。。
根据kmp算法中Next数组的性质,可以得到
a1 a2 a3 a4
a1 a2 a3 a4
这样错位的数组(假设next[4]=3)这时如果后面错位的部分是一额循环节,那么必然有k*(i-next[i])=i。假设有k*(i-next[i])=i,那么从上面的图能看出,a1=a2,a2=a3,a3=a4,这样就能够推出最后一个必然是循环节。
代码如下:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;char s[1000005];int next[1000005];int main(){// freopen("data.txt","r",stdin); int n; int kase=0; while(scanf("%d",&n)&&n) { printf("Test case #%d\n",++kase); scanf("%s",s); next[0]=0; next[1]=0; for(int i=1;i<n;++i) { int j=next[i]; while(j&&s[j]!=s[i])j=next[j]; next[i+1]= s[j]==s[i]?(j+1):0; } for(int i=1;i<=n;++i) { int tmp=i-next[i]; if(next[i]>0&&i%tmp==0) { printf("%d %d\n",i,i/tmp); } } printf("\n"); } return 0;}
0 0
- HDU—— 1358 Period
- hdu 1358——Period
- HDU 1358 Period ——kmp
- HDU 1358——Period(KMP 失配函数)
- hdu——1358Period(kmp专练)
- HDU 1358 Period (KMP)
- HDU 1358 Period
- hdu 1358 Period
- hdu 1358 Period
- hdu 1358 Period
- HDU 1358 Period KMP
- hdu 1358 Period
- hdu 1358 Period KMP
- hdu 1358 Period(KMP)
- HDU 1358 Period KMP
- hdu 1358 Period
- hdu 1358 Period
- 【HDU】1358 Period KMP
- 数字签名和数字信封的区别
- 细数那些精彩纷呈的引导页
- linux usb ehci controller driver
- SVN功能详解
- Android 4.3安全機制探討
- hdu 1358——Period
- linux下误删数据文件恢复
- 词权重计算及应用
- arguments&&callee
- ios开发之深入浅出 (4) — ARC之循环参照
- C#中正则表达式的使用
- ASWing 学习(2)
- HTML的一个Canvas实例
- 乔布斯的3个工作技巧:教你如何得到自己想要的