Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 34716 | Accepted: 14367 |
Description
Input
Output
Sample Input
abcd aaaa ababab .
Sample Output
1 4 3
Hint
Source
循环节 ,求字符串的循环的最大数量。
#include<stdio.h> #include<iostream> #include<math.h> #include<stdlib.h> #include<ctype.h> #include<algorithm> #include<vector> #include<string.h> #include<queue> #include<stack> #include<set> #include<map> using namespace std; char b[1000500]; int Next[1000500]; void get_next(char b[], int m) { int i = 0,j = -1; memset(Next,0,sizeof(Next)); Next[0] = -1; while (b[i]) { if (j == -1 || b[i] == b[j]) { ++i; ++j; Next[i] = j; } else j = Next[j]; } } int main() { int cases = 1, n, m, i, j, ans; while (scanf("%s",&b)!=EOF && b[0]!='.') { n = strlen(b); get_next(b, n); int t = Next[n]; int s = n - t; if (n % s == 0) ans = n / s; else ans = 1; printf("%d\n",ans); } return 0; }