HDU3746 Cyclic Nacklace

Posted Blogggggg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU3746 Cyclic Nacklace相关的知识,希望对你有一定的参考价值。

题目链接: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的主要内容,如果未能解决你的问题,请参考以下文章

hdu 3746 Cyclic Nacklace

Cyclic Nacklace HDU - 3746

hdu 3746 Cyclic Nacklace

HDU 3746 - Cyclic Nacklace(KMP)

HDU 3746 Cyclic Nacklace

Cyclic Nacklace HDU 3746 KMP 循环节