Pagini recente » Cod sursa (job #1910415) | Cod sursa (job #1372139) | Cod sursa (job #1462166) | Cod sursa (job #652553) | Cod sursa (job #779947)
Cod sursa(job #779947)
#include<stdio.h>
FILE *f = fopen("prefix.in","r");
FILE *g = fopen("prefix.out","w");
#define MaxS 1000100
int T;
int Pi[MaxS];
char S[MaxS];
void citire(void)
{
fgets(S+1,sizeof(S),f);
}
inline int Prefix(void)
{
int pi = 0,Sol = 0;
Pi[1] = 0;
for(int i=2;S[i];i++)
{
for(;S[pi+1] != S[i] && pi;pi = Pi[pi]);
if(S[pi+1] == S[i]) ++ pi;
Pi[i] = pi;
if(Pi[i] >= (i>>1))
if(i%(i-Pi[i]) == 0)
Sol = i;
}
return Sol;
}
int main()
{
fscanf(f,"%d\n",&T);
for(int i=1;i<=T;i++)
{
citire();
fprintf(g,"%d\n",Prefix());
}
}