hdu 3746(KMP的循环节问题)
2013-04-14 10:48
225 查看
题意:给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。
例子:
abcabc 已经循环2次,添加数为0
abcac 没有循环2次,添加字符abcac。数目为5.
abcabcab 已经循环过2次,但第三次不完整,需要添加数为1.
分析:就是一个简单的KMP循环节问题,但我只能说杭电的数据太水了,一开始我写的一个明显有BUG的代码也能够AC,算了不说了!!
代码实现:
例子:
abcabc 已经循环2次,添加数为0
abcac 没有循环2次,添加字符abcac。数目为5.
abcabcab 已经循环过2次,但第三次不完整,需要添加数为1.
分析:就是一个简单的KMP循环节问题,但我只能说杭电的数据太水了,一开始我写的一个明显有BUG的代码也能够AC,算了不说了!!
代码实现:
#include<iostream> #include<cstring> using namespace std; char a[100001]; int next[100001]; int main() { int T,len,i,j,nima; while(scanf("%d",&T)!=EOF) { getchar(); while(T--) { scanf("%s",a+1); len=strlen(a+1); i=1;j=0;next[1]=0; while(i<=len) { if(j==0||a[i]==a[j]) { i++;j++; next[i]=j; } else j=next[j]; } nima=(len+1)-next[len+1]; if(len%nima==0&&len!=nima//这里要注意个是循环节的长度不能等于它自己本身就是len!=nima printf("%d\n",0); else printf("%d\n",nima-len%nima); } } return 0; }
相关文章推荐
- hdu 3746 Cyclic Nacklace KMP循环节问题
- HDU 3746 KMP循环节问题
- hdu 3746 Cyclic Nacklace(KMP 最短循环节)
- KMP之循环节 hdu 3746
- HDU 3746 Cyclic Nacklace 数据结构+kmp周期类问题
- HDU - 3746 Cyclic Nacklace (kmp循环节)
- KMP之循环节 hdu 3746
- HDU 3746 Cyclic Nacklace(KMP找循环节)
- hdu 3746 Cyclic Nacklace (kmp扩展—最小循环节)
- HDU 1358 && HDU 3746 && POJ 2406 最小循环节 (KMP)
- KMP之循环节 hdu 3746
- 【KMP(循环节)】hdu 3746 Cyclic Nacklace
- HDU 3746 Cyclic Nacklace(KMP+最小循环节)
- HDU 3746 KMP求循环节
- KMP之循环节 hdu 3746
- HDU 3746 Cyclic Nacklace(KMP最小循环节)
- HDU-3746(KMP求最小循环节)
- HDU 3746 Cyclic Nacklace [KMP+循环节]
- HDU 3746 KMP的运用。【求字符串添加几个字符,可以成有循环节字符串】
- HDU 3746 KMP_Next 找循环节