标签: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