zoj 1905为啥超时了,算法的问题吗?
#include <stdio.h>
#include <string.h>
main()
{
char a[1000005];
int i,j,k,m,flag;
while(scanf( "%s ",a)!=EOF && strcmp(a, ". ")!=0)
{
j=(int)strlen(a);
for(i=1;a[i]!= '\0 ';i++)
{
if((int)strlen(a)%i==0)
{
flag=0;
if(a[i]==a[0]&&(a[i+1]==a[1] || strlen(a)==2)&&(a[i+2]==a[2] || strlen(a)==3))
{
flag=1;
for(k=i;a[k]!= '\0 '&&flag!=0;k+=i)
{
for(m=0;m <i;m++)
{
if(a[k+m]!=a[m])
{
flag=0;
break;
}
}
}
}
if(flag==1)
{
j=i;
break;
}
}
}
printf( "%d\n ",(int)strlen(a)/j);
}
}
[解决办法]
#include <stdio.h>
#include <string.h>
int main()
{
char str[1000000];
int i,j;
int len,strLength;
while(scanf( "%s ", str)==1)
{
if(strcmp(str, ". ")==0)
break;
len=strLength=strlen(str);
j=0;
for(i=1; i <strLength; ++i)
{
if(str[0] == str[i])
{
if(strLength % i == 0)
{
len = i;
while(str[i] && str[i] == str[j])
i++,j++;
if(str[i] == 0)
break;
i--;
j=0;
len = strLength;
}
}
}
printf( "%d\n ",strLength / len);
}
return 0;
}