Pagini recente » Cod sursa (job #1471460) | Cod sursa (job #1026647) | Cod sursa (job #3204823) | Cod sursa (job #2822010) | Cod sursa (job #1199128)
#include <cstdio>
#include <cstring>
FILE* in=fopen("prefix.in","r");
FILE* out=fopen("prefix.out","w");
const int Q=1000001;
char v[Q];
int size;
int pre[Q];
int val[Q];
void rezolv()
{
int k=0;
int last=0;
for(int i=2; i<=size; i++)
{
while(k>0 && v[i]!=v[k+1])
k=pre[k];
if(v[k+1]==v[i])
k++;
pre[i]=k;
if(k*2==i)
{
val[i]=k;
last=i;
}
else if(k!=0 && val[k]==i-k)
{
val[i]=val[k];
last=i;
}
}
fprintf(out,"%d\n",last);
}
int main()
{
int t;
fscanf(in,"%d\n",&t);
for(int i=1; i<=t; i++)
{
fscanf(in,"%s\n",v+1);
size=strlen(v+1);
rezolv();
}
return 0;
}