Power Strings
Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 39658 | Accepted: 16530 |
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
KMP算法
设字符串的长度为l,假设l%(l-next[l])=0。该序列为循环序列,循环节长度为l-next[l],答案即为l/(l-next[l]);反之则不为循环序列。答案为1。
#include#include #include #include #include #include #define F(i,j,n) for(int i=j;i<=n;i++)#define D(i,j,n) for(int i=j;i>=n;i--)#define ll long long#define pa pair #define maxn 1000010#define inf 1000000000using namespace std;char s[maxn];int l,nxt[maxn];inline void getnext(){ int i=0,j=-1; nxt[0]=-1; while (i