HDU3746 Cyclic Nacklace
阿新 • • 發佈:2018-02-13
-- 有效 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 intlen=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