//4_7_17: Power Strings 字符串分解为连乘串 POJ2406 ZOJ 1905
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxc = 1000000 + 10;
int len;
int suf[maxc];
char str[maxc]; //如果数据非常大就最好在子函数中不要用形参了,而是把参数变成全局变量,这样省空间
int KMP()
{
int j = 0,k = -1;
suf[0] = -1;
while(j < len)
{
if(k == -1 || str[j] == str[k])
{
j ++;
k ++;
suf[j] = k;
}
else k = suf[k];
}
if(len % (len - suf[len]) == 0)
return len - suf[len];
else
return len;
}
int main()
{
while(scanf("%s",str) != EOF)
{
if(str[0] == '.') break;
len = strlen(str);
int ans = KMP();
printf("%d\n",len / ans);
}
return 0;
}
/*测试结果:通过POJ2406 ZOJ 1905检测
abcd
1
aaaa
4
ababab
3
.
请按任意键继续. . .
*/
POJ2406 ZOJ 1905 Power Strings
最新推荐文章于 2015-07-17 16:32:01 发布