Cyclic Nacklace HDU - 3746
求后缀凑成循环串还差几个字符
KMP练习
从前面的无线传输我们已经懂了怎么利用KMP求循环串长度,这里我们从尾下标就可以判断末尾是循环串的第几个字符
但这里有多种情况,分类讨论即可
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 const int N = 100010; 6 char a[N]; 7 int ne[N]; 8 int main() 9 { 10 int t; 11 scanf("%d",&t); 12 while(t--){ 13 int ans = 0; 14 scanf("%s",a+1); 15 int len = strlen(a+1); 16 for(int i=2,j=0;i<=len;i++){ 17 while(j&&a[i]!=a[j+1]) j = ne[j]; 18 if(a[i]==a[j+1]) j++; 19 ne[i] = j; 20 } 21 int tmp = len-ne[len]; 22 if(len%tmp==0){ 23 if(ne[len]==0) ans = len; 24 else ans = 0; 25 }else ans = tmp-len%tmp; 26 printf("%d\n",ans); 27 } 28 return 0; 29 }