poj 2406 Power Strings(kmp next数组的应用)
来源:互联网 发布:全文翻译的软件 编辑:程序博客网 时间:2024/05/22 15:55
分析转自:http://www.cnblogs.com/zhanzhao/p/4761477.html
大意:给出一个字符串 问它最多由多少相同的字串组成
如 abababab由4个ab组成
分析:
kmp中的next数组求最小循环节的应用
例如
ababab next[6] = 4; 即
ababab
ababab
1~4位 与2~6位是相同的
那么前两位
就等于3、4位
3、4位就等于5、6位
……
所以 如果 能整除 也就循环到最后了
如果不能整除
就最后余下的几位不在循环内
例如
1212121
1212121
最后剩余1不能等于循环节
代码:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn = 1e6+5;char str[maxn];int next[maxn];void makeNext(void){ int len = strlen(str); next[0] = next[1] = 0; for(int i = 1; i < len; i++) { int j = next[i]; while(j && str[i] != str[j]) j = next[j]; next[i+1] = str[i]==str[j] ? j+1 : 0; }}int main(void){ while(~scanf(" %s", str)) { if(str[0] == '.') break; makeNext(); int len = strlen(str); if(len%(len-next[len]) == 0) printf("%d\n", len/(len-next[len])); else puts("1"); } return 0;}
Power Strings
Time Limit: 3000MS Memory Limit: 65536KTotal Submissions: 44865 Accepted: 18741
Description
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiation by a non-negative integer is defined in the normal way: a^0 = "" (the empty string) and a^(n+1) = a*(a^n).
Input
Each test case is a line of input representing s, a string of printable characters. The length of s will be at least 1 and will not exceed 1 million characters. A line containing a period follows the last test case.
Output
For each s you should print the largest n such that s = a^n for some string a.
Sample Input
abcdaaaaababab.
Sample Output
143
Hint
This problem has huge input, use scanf instead of cin to avoid time limit exceed.
Source
Waterloo local 2002.07.01
1 1
- poj 2406 Power Strings(kmp next数组的应用)
- poj 2406 Power Strings KMP的next数组的应用
- POJ 2406 Power Strings (KMP next数组应用)
- poj 2406 Power Strings kmp next数组
- POJ 2406 Power Strings (kmp next数组)
- Power Strings POJ 2406【KMP Next的应用】
- 【next数组应用】POJ 2406 Power Strings
- POJ-Power Strings(next数组应用)
- POJ 2046 Power Strings KMP(next数组应用)
- POJ 2406 Power Strings(next数组应用)
- POJ 2406 Power Strings KMP中next数组简单运用
- 【POJ2406】Power Strings-KMP中next数组的应用
- POJ 2406 Power Strings(KMP的应用)
- poj 2406 Power Strings 【KMP的应用】
- Power Strings (kmp中next数组的运用)
- POJ 2406-Power Strings(重复子串-KMP中的next数组)
- Power Strings next数组应用
- POJ 2406 Power Strings 【后缀数组||KMP】
- Android Glide源码解析
- Instability
- (4.1.43.1)design support library:浮动操作按钮Floating action button (FAB)
- Scrapy安装过程中遇到的问题及解决方法
- Retrofit2 源码解析
- poj 2406 Power Strings(kmp next数组的应用)
- MFC中常用控件使用方法总结
- 原生JS forEach()和map()遍历的区别以及兼容写法
- 简单的linux命令
- 在windows端建立本地node-gulp环境进行前端开发
- 怎么理解st_thread库(3)
- Redis主从配置和HA配置
- leetCode练习(50)
- 100. Same Tree