POJ2406--Power Strings(KMP变形)
2017-08-23 17:17
429 查看
Do more with less
aaaa
ababab
.
4
3
字符串aaaa 是 a 的四次方
字符串ababab 是 ab 的3次次方
输入 . 表示测试结束
如果next数组从第二个数起一直增加,说明这个序列是由一个字母组成
如果倒序检索next数组,遇到的第一个0的时候,前面的序列一定不能用次方的形式表示
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
abcdaaaa
ababab
.
Sample Output
14
3
Hint
This problem has huge input, use scanf instead of cin to avoid time limit exceed.题意
字符串abcd 是 abcd 的一次方字符串aaaa 是 a 的四次方
字符串ababab 是 ab 的3次次方
输入 . 表示测试结束
思路
如果是一个没有重复的串,那它的next数组会一直是0如果next数组从第二个数起一直增加,说明这个序列是由一个字母组成
如果倒序检索next数组,遇到的第一个0的时候,前面的序列一定不能用次方的形式表示
代码
#include <iostream> #include <cstdio> #include <cstring> using namespace std; char p[1000005]; int nextp[1000005]; int m; int getnextp() { int i = 0; int j = -1; nextp[0] = -1; while(i <= m) { if(p[i] == p[j] || j == -1) { j++; i++; nextp[i] = j; } else { j = nextp[j]; } } i = m; while(nextp[i] > nextp[i-1] && i >= 0) { i--; } if(i == 0) return m; if(nextp[i] == 0 && m % i == 0) return m /i; else return 1; } int main() { while(scanf("%s",p) && p[0] != '.') { m = strlen(p); printf("%d\n", getnextp()); } return 0; }
相关文章推荐
- poj 2406 Power Strings(KMP变形)
- POJ 2406 Power Strings(kmp)
- POJ 2406 Power Strings(kmp)
- poj 2406:Power Strings(KMP)
- poj 2406 Power Strings【kmp循环节】
- poj 2406 Power Strings【KMP】
- POJ 2406 Power Strings (kmp数组)
- |poj 2406|KMP|Power Strings
- 【KMP(循环节)】poj 2406 Power Strings(外:hdu 1358 Period)
- POJ 2406 Power Strings (KMP next数组应用)
- poj 2406 Power Strings (KMp)
- POJ-2406 Power Strings(KMP)
- poj 2406 Power Strings(KMP)
- POJ 2406 Power Strings 1961的简化版,kmp的next数组的应用
- poj2406 Power Strings(KMP)
- POJ 2406 Power Strings (KMP)
- poj 2406 Power Strings(kmp应用)
- poj 2406 Power Strings 【kmp(len/(len-p[len])的灵活运用)】
- POJ 2406 Power Strings [KMP+循环节规律]
- Power Strings POJ 2406【KMP Next的应用】