HDU 3746 Cyclic Nacklace(KMP找循环节)
2015-02-21 20:41
337 查看
这个题是给出一个字符串,问字符串后最少补多少个字母才能使这个字符串是一个周期串....周期最少是2...周期为1就不是周期串了...
根据next数组(虽然我的数组名是pre)的值可以看出周期串的性质...在最小周期之后的周期串,next数组的值是一直增大的...然后最小周期与i的关系是t=i-next[i]...然后我们看最后一个数字后面缺多少个凑成一个周期就好了...
根据next数组(虽然我的数组名是pre)的值可以看出周期串的性质...在最小周期之后的周期串,next数组的值是一直增大的...然后最小周期与i的关系是t=i-next[i]...然后我们看最后一个数字后面缺多少个凑成一个周期就好了...
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> using namespace std; char a[102000]; int pre[100020];//前缀数组,pre[i]代表b数组中从第i个元素开始有pre[i]个元素和开头相等 int m; void getpre() { int i=0,j=-1; pre[0]=-1; while(i<m) { if(j==-1||a[i]==a[j]) pre[++i]=++j; else j=pre[j]; } } int main() { int t; cin>>t; while(t--) { scanf("%s",a); m=strlen(a); getpre(); int len=m-pre[m]; if(m!=len&&m%len==0) printf("0\n"); else { int ans=len-pre[m]%len; printf("%d\n",ans); } } return 0; }
相关文章推荐
- hdu 3746 Cyclic Nacklace(KMP 最短循环节)
- HDU 3746 Cyclic Nacklace(KMP+最小循环节)
- hdu 3746 Cyclic Nacklace (kmp扩展—最小循环节)
- (KMP 1.4)hdu 3746 Cyclic Nacklace(使用next数组来求循环节的长度——求一个字符串需要添加多少个字符才能使该字符串的循环节的个数>=2)
- 【kmp循环节】hdu 3746 Cyclic Nacklace
- HDU - 3746 Cyclic Nacklace (kmp循环节)
- HDU - 3746 Cyclic Nacklace(KMP 循环节)
- HDU 3746 Cyclic Nacklace (KMP 循环节)
- HDU 3746 Cyclic Nacklace [KMP+循环节]
- HDU 3746 Cyclic Nacklace(KMP最小循环节)
- HDU 3746 Cyclic Nacklace 环形项链(KMP,循环节)
- HDU 3746 (KMP求最小循环节) Cyclic Nacklace
- HDU 3746 Cyclic Nacklace(KMP:补齐循环节)
- HDU 3746|Cyclic Nacklace|KMP求最小循环节
- hdu 3746 Cyclic Nacklace (KMP求最小循环节)
- HDU 3746 Cyclic Nacklace (KMP找循环节)
- 【KMP(循环节)】hdu 3746 Cyclic Nacklace
- HDU 3746 Cyclic Nacklace(KMP找循环节)
- HDU 3746--Cyclic Nacklace【KMP(最小循环节)】
- [KMP-求循环节]HDU 3746 Cyclic Nacklace