hdu 3746 Cyclic Nacklace (kmp扩展—最小循环节)
2015-02-12 16:54
411 查看
题意:
给出字符串,求至少要加几个字符使得字符串能够成为循环的串。
题解:
最小循环节,首先我先YY证明一下最小循环节(想了好久),next数组存的是最长公共前后缀的长度,那么这个例子abcdab,next[len]=2,发现其实最小的循环节就是从开头到长度为2的部分+长度为2的部分到长度为2的后缀之前,也就是abcd是最下循环节。那么计算要加入几个就好办了
最小循环节:cir=len-next[len]
答案:ans=len-(len-cir*(len/cir))
给出字符串,求至少要加几个字符使得字符串能够成为循环的串。
题解:
最小循环节,首先我先YY证明一下最小循环节(想了好久),next数组存的是最长公共前后缀的长度,那么这个例子abcdab,next[len]=2,发现其实最小的循环节就是从开头到长度为2的部分+长度为2的部分到长度为2的后缀之前,也就是abcd是最下循环节。那么计算要加入几个就好办了
最小循环节:cir=len-next[len]
答案:ans=len-(len-cir*(len/cir))
#include<iostream> #include<math.h> #include<stdio.h> #include<algorithm> #include<string.h> #include<vector> #include<map> using namespace std; //typedef long long lld; const int oo=0x3f3f3f3f; //const lld OO=1LL<<61; const int MOD=10007; const int maxn=100005; int next[maxn]; char str[maxn]; void get_next(int len) { int i=0;next[i]=-1; int j=-1; while(i<len) { if(j==-1||str[i]==str[j]) { i++; j++; next[i]=j; } else j=next[j]; } } int main() { int T,n; scanf("%d",&T); while(T--) { scanf("%s",str); int len=strlen(str); get_next(len); int cir=len-next[len]; int ans; if(cir!=len&&len%cir==0) ans=0; else ans=cir-(len-cir*(len/cir)); printf("%d\n",ans); } return 0; } /** abcd -> abcdabc abcda */
相关文章推荐
- 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 (求最小循环节)
- HDU 3746 Cyclic Nacklace(KMP最小循环子串)
- 【kmp循环节】hdu 3746 Cyclic Nacklace
- 模板题 + 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,循环节)
- (KMP 1.4)hdu 3746 Cyclic Nacklace(使用next数组来求循环节的长度——求一个字符串需要添加多少个字符才能使该字符串的循环节的个数>=2)
- hdu 3746 Cyclic Nacklace (kmp 最小重复子串补齐)