[KMP求最小循环节][HDU3746][Cyclic Nacklace]
来源:互联网 发布:玻尔兹曼常数测量 知乎 编辑:程序博客网 时间:2024/06/06 03:22
题意
给你个字符串,问在字符串末尾还要添加几个字符,使得字符串循环2次以上。
解法
无论这个串是不是循环串
i-next[i] 都能求出它的最小循环节
代码:
/*思路:kmp+字符串的最小循环节问题分析:1 题目要求的是给定一个字符串,问我们还需要添加几个字符可以构成一个由n个循环节组成的字符串。2 可知我们应该先求出字符串的最小循环节的长度:假设字符串的长度为len,那么最小的循环节就是cir = len-next[len] ;如果有len%cir == 0,那么这个字符串就是已经是完美的字符串,不用添加任何字符;如果不是完美的那么需要添加的字符数就是cir - (len-(len/cir)*cir)),相当与需要在最后一个循环节上面添加几个。3 如果cir = 1,说明字符串只有一种字符例如“aaa” ; 如果cir = m说明最小的循环节长度为m,那么至少还需m个; 如果m%cir == 0,说明已经不用添加了。*/#include <iostream>#include <cstring>#include <cstdio>using namespace std;char str[100005];int next[100005];void getnext(int len){ int i = 0,j = -1; next[0] = -1; while(i<len) { if(j == -1 || str[i] == str[j]) { i++; j++; next[i] = j; } else j = next[j]; }}int main(){ int n; cin >> n; getchar(); while(n--) { gets(str); memset(next,0,sizeof(next)); int len = strlen(str); int ans; getnext(len); ans = len - next[len]; if(ans!=len && len%ans == 0) cout << 0 << endl; else cout << ans-next[len]%ans << endl; } return 0;}
0 0
- [KMP求最小循环节][HDU3746][Cyclic Nacklace]
- HDU3746 Cyclic Nacklace(KMP+最小循环节)
- HDU3746 Cyclic Nacklace(KMP,最小循环节)
- D - Cyclic Nacklace HDU3746 (kmp 计算字符串最小循环节 )
- hdu3746 Cyclic Nacklace(kmp周期 最小循环节)
- hdu3746 Cyclic Nacklace KMP判断循环节
- hdu3746 Cyclic Nacklace(kmp找循环节)
- HDU3746 Cyclic Nacklace KMP找循环节
- hdu3746 Cyclic Nacklace (循环节)
- hdu 3746 Cyclic Nacklace (KMP求最小循环节)
- hdu 3746 Cyclic Nacklace (kmp求最小循环节)
- 【KMP】 hdu3746 Cyclic Nacklace
- HDU3746-Cyclic Nacklace(KMP)
- HDU3746 Cyclic Nacklace 【KMP】
- hdu3746 Cyclic Nacklace(KMP)
- hdu3746 Cyclic Nacklace--KMP
- HDU3746 Cyclic Nacklace(KMP)
- HDU3746--Cyclic Nacklace (Kmp)
- HDU 5454 Excited Database 线段树的维护
- (乙)1008. 数组元素循环右移问题
- php文件锁
- js 比较日期
- 去除浏览器账号信息自动填充
- [KMP求最小循环节][HDU3746][Cyclic Nacklace]
- DEV Gridview全选checkbox 和MultiSelection无缝结合
- 02-线性结构3 Pop Sequence
- oracle对象的定义、执行权限
- Word Frequency
- Unity3D学习笔记(六)音乐和音效
- 奇葩的JS数组
- mac COCOS2D-V3.X开发环境
- IOS CocoaPods安装和使用教程