标签:
Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 44217 | Accepted: 18449 |
Description
Input
Output
Sample Input
abcd aaaa ababab .
Sample Output
1 4 3
/* * POJ 2406 Power Strings * 求字符串循环节出现的次数 * * 结论:字符串S有最小循环节(p<len)的充要条件是(len-next[len])|len,next[len]>0 * 其中p是循环节长度,len是字符串S的长度 */ #include <stdio.h> #include <string.h> #include <iostream> using namespace std; const int MAXN = 1000000+10; void Get_Next(char* P,int* next) { int i=0,k=-1; int plen=strlen(P); next[0]=-1; while(i<plen) { if(k==-1||P[k]==P[i]) { i++,k++; next[i]=k; } else k=next[k]; } } char str[MAXN]; int nxt[MAXN]; int main() { while(scanf("%s",str)==1) { if(str[0]==‘.‘) break; Get_Next(str,nxt); int n=strlen(str); int k=n-nxt[n]; if(n%k==0&&n/k>1) printf("%d\n",n/k); else printf("1\n"); } return 0; }
POJ 2406 Power Strings (求字符串循环节出现的次数)
标签:
原文地址:http://www.cnblogs.com/wangdongkai/p/5799689.html