1. 程式人生 > >HDU3746 Cyclic Nacklace

HDU3746 Cyclic Nacklace

-- 有效 targe class body esp ini ace print

題目鏈接:https://vjudge.net/problem/HDU-3746

知識點:  KMP

解題思路:

  論如何用 \(Next[]\) 數組求循環節。

AC代碼:

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 const int maxn = 100000+5;
 5 char inp[maxn];
 6 int Next[maxn];
 7 void init(int plen){
 8     memset(Next,0,sizeof(Next));
 9     int i=0,j=-1;
10     Next[0
]=-1; 11 while(i<plen){ 12 if(j==-1||inp[i]==inp[j]){ 13 i++,j++; 14 Next[i]=j; 15 } 16 else 17 j=Next[j]; 18 } 19 } 20 int main(){ 21 int T; 22 scanf("%d",&T); 23 while(T--){ 24 scanf("%s",inp); 25 int
len=strlen(inp); 26 init(len); 27 int tmp=len-Next[len]; //tmp:循環節長度 28 if(tmp!=len&&len%tmp==0) printf("0\n"); 29 else printf("%d\n",tmp-Next[len]%tmp); //%tmp有效地忽略了Next[len]裏面的完整的循環節 30 } 31 return 0; 32 }

HDU3746 Cyclic Nacklace