标签:des blog io ar sp for on div log
Description
Input
Output
Sample Input
3 aaa 12 aabaabaabaab 0
Sample Output
Test case #1 2 2 3 3 Test case #2 2 2 6 2 9 3 12 4
题意是给定s,枚举每个s的前缀,判断是不是由一个串重复多次组成。如果是输出前缀长度和这个串最多自我复制几次
这题还是跟bzoj1355一样……枚举每个i和i-next[i],如果能整除就输出。
#include<cstdio>
#include<cstring>
int next[1000010];
char s[1000010];
int cnt,l,len,j;
inline void pre()
{
memset(next,0,sizeof(next));
j=0;
for (int i=2;i<=l;i++)
{
while (j>0 && s[j+1]!=s[i])j=next[j];
if (s[j+1]==s[i])j++;
next[i]=j;
}
}
int main()
{
while (scanf("%d",&l)&&l)
{
scanf("%s",s+1);
pre();
printf("Test case #%d\n",++cnt);
for(int i=1;i<=l;i++)
{
len=i-next[i];
if (i%len==0&&next[i])
printf("%d %d\n",i,i/len);
}
printf("\n");
}
return 0;
}
标签:des blog io ar sp for on div log
原文地址:http://www.cnblogs.com/zhber/p/4162979.html