Mai intai trebuie sa te autentifici.
Cod sursa(job #779728)
Utilizator | Data | 18 august 2012 17:10:26 | |
---|---|---|---|
Problema | Prefix | Scor | 90 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.63 kb |
#include <stdio.h>
#include <string.h>
#define NMax 1000010
const char IN[]="prefix.in",OUT[]="prefix.out";
int Tes,N,Rez;
int P[NMax];
char A[NMax];
void prefix(){
int i,k=0;
P[1]=0;Rez=0;
for (i=2;i<=N;++i)
{
while (k>0 && A[k+1]!=A[i])
k=P[k];
if (A[k+1]==A[i])
++k;
P[i]=k;
if (P[i]>=i/2 && i%(i-P[i])==0 ) Rez=i;
}
}
int main()
{
freopen(IN,"r",stdin);
scanf("%d\n",&Tes);
freopen(OUT,"w",stdout);
while (Tes--)
{
//scanf("%s",A+1);
fgets(A+1,NMax,stdin);
N=strlen(A+1)-1;
prefix();
printf("%d\n",Rez);
}
fclose(stdout);
fclose(stdin);
return 0;
}