【KMP(循环节)】poj 2406 Power Strings(外:hdu 1358 Period)

来源:互联网 发布:怎么恢复手机里的数据 编辑:程序博客网 时间:2024/04/29 23:30

http://poj.org/problem?id=2406

#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int NM=10000005;int next[NM];char str[NM];void get_next(){int i,j,len;len=strlen(str);i=0;next[0]=j=-1;while(i<len){if(j==-1 || str[i]==str[j]){i++;j++;next[i]=j;}else j=next[j];}}int main(){int t,len;while(scanf("%s",str)){if(strcmp(str,".")==0) break;len=strlen(str);get_next();t=len-next[len];if(len%t==0) printf("%d\n",len/t);else printf("1\n"); }return 0;}



http://acm.hdu.edu.cn/showproblem.php?pid=1358

#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int NM=1000005;int next[NM];char str[NM];void get_next(){int i,j,len;len=strlen(str);i=0;next[0]=j=-1;while(i<len){if(j==-1 || str[i]==str[j]){i++;j++;next[i]=j;}else j=next[j];}}int main(){int i,t,k,len;k=1;while(scanf("%d",&len) && len){scanf("%s",str);get_next();printf("Test case #%d\n",k++);for(i=2;i<=len;i++){t=i-next[i];if(t!=i && i%t==0){printf("%d %d\n",i,i/t);}}printf("\n");}return 0;}



0 0
原创粉丝点击