题目大意:叙述的比较高大上,其实就是一个字符串B = AAAAAAA,求出来这个A最短有多长
分析:注意如果这个串不是完全循环的,那么循环节就是就是它本身。
代码如下:
#include<stdio.h> #include<string.h> const int MAXN = 1e6+7; const int oo = 1e9+7; char s[MAXN]; int next[MAXN]; void GetNext(int N) { int i=0, j=-1; next[0] = -1; while(i < N) { if(j==-1 || s[i]==s[j]) next[++i] = ++j; else j = next[j]; } } int main() { while(scanf("%s", s), strcmp(s, ".")) { int N = strlen(s); GetNext(N); int circle = N - next[N]; if(N % circle == 0) printf("%d\n", N/circle); else printf("1\n"); } return 0; }
时间: 2024-11-20 10:26:45