【KMP(循环节)】hdu 3746 Cyclic Nacklace

来源:互联网 发布:域名和主机 编辑:程序博客网 时间:2024/05/21 21:45

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

 分析:差多少补成有循环节的字符串


#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int NM=100005;int next[NM];char str[NM];void get_next(int len){int i,j;next[0]=-1;j=-1;i=0;while(i<len)  //最朴素的KMP{if(j==-1||str[i]==str[j]){i++;j++;next[i]=j;}else j=next[j];}}int main(){int T,ans,len;scanf("%d",&T);while(T--){scanf("%s",str);len=strlen(str);get_next(len);ans=len-next[len];  //最小的循环节if(ans!=len&&len%ans==0)printf("0\n");elseprintf("%d\n",ans-len%ans);}return 0;}