hdu 3746 Cyclic Nacklace (kmp扩展—最小循环节)
来源:互联网 发布:网络本科学位证有用吗 编辑:程序博客网 时间:2024/05/21 06:36
题意:
给出字符串,求至少要加几个字符使得字符串能够成为循环的串。
题解:
最小循环节,首先我先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-> abcdabcabcda*/
0 0
- 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求最小循环节)
- 【kmp算法—最小循环节】Cyclic Nacklace HDU
- HDU 3746 Cyclic Nacklace (KMP 循环节)
- 【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最小循环子串)
- HDU3746 Cyclic Nacklace(KMP+最小循环节)
- HDU3746 Cyclic Nacklace(KMP,最小循环节)
- 模板题 + KMP + 求最小循环节 --- HDU 3746 Cyclic Nacklace
- HDU 3746 Cyclic Nacklace KMP求字符串最小循环节长度
- [KMP-求循环节]HDU 3746 Cyclic Nacklace
- tomcat在server.xml修改默认的session名称
- 例看const与指针兼容性
- mongodb 2.6 新建用户
- Unity性能优化之Draw Call
- 使用JNotify监控硬盘
- hdu 3746 Cyclic Nacklace (kmp扩展—最小循环节)
- 日语五十音图。
- IOS 应用内购买
- leetcode_01_Two sum
- Android 解决点击EditText获取焦点时输入法占满手机屏幕的办法
- 浅谈实战中销售信的写作
- Oracle dblink详解
- 设计包含min函数的栈
- 游戏服务端pomelo完整安装配置过程