码迷,mamicode.com
首页 > 其他好文 > 详细

HDU3746 Cyclic Nacklace

时间:2018-02-13 00:13:07      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:忽略   href   gpo   ems   oid   tar   ace   tmp   init   

题目链接: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

标签:忽略   href   gpo   ems   oid   tar   ace   tmp   init   

原文地址:https://www.cnblogs.com/Blogggggg/p/8445859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!