Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 37505 | Accepted: 15492 |
Description
Input
Output
Sample Input
abcd aaaa ababab .
Sample Output
1 4 3
Hint
这道题是利用kmp函数next求循环结,具体解法参照kmp中next的定义:只要len % (len - next[len]) == 0就说明字符串能被[next[len]~len]的子串构成,直接套公式就行了。
#include<stdio.h> #include<string.h> #define max 1000000+10 char str[max]; int next[max],len; void getnext(){ int i = 0,j = -1; next[i] = j; while(i < len){ if(j == -1 || str[i] == str[j]){ ++i;++j; next[i] = j; } else j = next[j]; } } int main(){ while(~scanf("%s",str)&&str[0]!='.'){ len = strlen(str); getnext(); if(len % (len - next[len]) == 0) printf("%d\n",len / (len - next[len])); else printf("1\n"); } return 0; }