Pagini recente » Cod sursa (job #1172017) | Cod sursa (job #1071031) | Cod sursa (job #2377207) | Cod sursa (job #454680) | Cod sursa (job #1741570)
#include <cstdio>
#define MAXN 1000000
char v[MAXN+2];
int pi[MAXN+1];
inline void Calc_Prefix(char *A,int n){
int i,k;
k=0;
pi[1]=0;
for(i=2;i<=n;i++){
while(k>0&&A[k+1]!=A[i])
k=pi[k];
if(A[k+1]==A[i])
k++;
pi[i]=k;
}
}
int main(){
FILE*fi,*fout;
int t,i,n,j,x,rez;
char a;
fi=fopen("prefix.in" ,"r");
fout=fopen("prefix.out" ,"w");
fscanf(fi,"%d " ,&t);
while(t>0){
t--;
a=fgetc(fi);
n=0;
while(a!='\n'){
v[++n]=a;
a=fgetc(fi);
}
Calc_Prefix(v,n);
rez=0;
i=2;
while(i<=n){
if(pi[i]*2==i){
j=i;
x=pi[i];
while(j<=n&&pi[j]==x){
x++;
j++;
}
x=((j-1)/pi[i])*pi[i];
if(x>rez)
rez=x;
i=j;
}
else
i++;
}
fprintf(fout,"%d\n" ,rez);
}
fclose(fi);
fclose(fout);
return 0;
}