poj 2406 Power Strings KMP

来源:互联网 发布:软件需求调查问卷 编辑:程序博客网 时间:2024/04/29 18:50

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代码:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;char  s[1000005];              //题目没说 结果开小了就runtime error。。int next[1000005];int s1,ss;void getnext(char *s){int i=0;int j=-1;next[0]=-1;while(i<s1){if(j==-1||s[i]==s[j]){++i;++j;next[i]=j;}elsej=next[j];}i=s1-j;              if(s1%i==0)ss=s1/i;else ss=1;return ;}int main(){while(scanf("%s",s)){if(s[0]=='.')break;s1=strlen(s);getnext(s);cout<<ss<<endl;}return 0;}
可以通过调试来理解
0 0
原创粉丝点击