Pagini recente » Cod sursa (job #1615065) | Cod sursa (job #2854680) | Cod sursa (job #3039736) | Cod sursa (job #594067) | Cod sursa (job #748580)
Cod sursa(job #748580)
#include <stdio.h>
#include <string.h>
#define NMAX 1000004
char a[NMAX];
int sol;
FILE *g;
inline int maxim(int a, int b)
{ return a>=b?a:b;}
void calc_sol()
{
int v[NMAX];
int i,j=0, n = strlen(a);
a[--n]= 0;
v[0] = 0;
sol = 0;
int x =0;
int last = 1;
for(i=1;i<n;i++)
{
while(j && a[j] != a[i])
j = v[j-1];
if(a[j] == a[i])
++j;
v[i] = j;
if(v[i] == 1)
{
last = i;
// fprintf(g,"last: %d\n", last);
}
if( v[i] && (i+1) % last ==0)
{
x = v[i];
sol = i + 1;
}
//sol = maxim(sol, v[i]);
}
// for(i=0;i<n;i++)
// fprintf(g,"%d ", v[i]);
// fprintf(g,"\n");
// printf("%d\n",sol);
}
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
int i,j,t;
scanf("%d",&t);
for(i=0;i<t;i++)
{
fgets(a,sizeof(a), stdin);
calc_sol();
printf("%d\n",sol);
}
return 0;
}