| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
数据有问题,加了个mod来判断循环,结果WA,直接输出长度就能A#include<stdio.h>
#include<string.h>
#include<cstring>
#define val 10005
int r,c;
char map[val][78];
int next[78*val],cnt[80];
char s[val*78];
void set_next(char *,int );
int main()
{
int i,j,k,num,index,ans,temp;
bool flag;
while(scanf("%d %d",&r,&c)!=EOF)
{
memset(cnt,0,sizeof(cnt));
index=num=0;
for(i=0;i<r;i++)
scanf("%s",map[i]);
cnt[c]=r;
for(i=0;i<r;i++)
{
for(j=1;j<c;j++)
{
flag=false;
temp=c/j;
for(k=1;k<temp;k++)
{
if(strncmp(map[i],map[i]+j*k,j))
{
flag=true;
break;
}
}
temp*=j;
if(!flag&&c-temp)
if(strncmp(map[i],map[i]+temp,c-temp))
flag=true;
if(!flag) cnt[j]++;
}
}
for(i=1;i<=c;i++)
if(cnt[i]==r) break;
num=i;
for(i=0;i<r;i++) map[i][num]=0;
j=0,k=-1;
next[j]=k;
while(j<r)
{
if(k==-1||strcmp(map[j],map[k])==0)
{
j++;
k++;
next[j]=k;
}
else k=next[k];
}
if(r%(r-next[r]))
ans=(r-next[r])*num;
else ans=r*num;
printf("%d\n",ans);
}
return 0;
}
void set_next(char *p,int len)
{
int j,k;
j=0,k=-1;
next[j]=k;
while(j<len)
{
if(k==-1||p[j]==p[k])
{
j++;
k++;
next[j]=k;
}
else k=next[k];
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator