挺直白的一道考KMP轮回串的题目,打完代码,测试了各种数据没有问题,提交wa。怎么想都想不明白,然后看discuss里面别人的代码,遇到“.“要直接跳出。
最后一行这个”.“藏得也太深了……
#include<stdio.h>
#include<string.h>
#define N 1000005
char s[N];
int next[N];
int ln;
void setNext(char *s)
{
int i,j;
j=-1;i=0;
next[i]=j;
while(i<ln)
{
if(j==-1||s[i]==s[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
return ;
}
int main()
{
while(gets(s))
{
if(strcmp(s,".")==0)
break;
if(strcmp(s,"")==0)
{
printf("0\n");
continue;
}
int min;
ln=strlen(s);
setNext(s);
min=ln-next[ln];
if(ln%min==0&&ln!=min)
printf("%d\n",ln/min);
else
printf("1\n");
}
return 0;
}