Pagini recente » Cod sursa (job #2656551) | Cod sursa (job #675272) | Cod sursa (job #182412) | Cod sursa (job #592903) | Cod sursa (job #748578)
Cod sursa(job #748578)
#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);
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()
{
FILE *f = fopen("prefix.in","r");
g = fopen("prefix.out","w");
int i,j,t;
fscanf(f,"%d",&t);
for(i=0;i<t;i++)
{
fscanf(f,"%s",a);
calc_sol();
fprintf(g,"%d\n",sol);
}
fclose(f);
fclose(g);
return 0;
}