Pagini recente » Cod sursa (job #733593) | Clasament simulare-cartita-22 | Istoria paginii preoni-2007/runda-finala/poze/concurs | Cod sursa (job #2696996) | Cod sursa (job #733582)
Cod sursa(job #733582)
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
char c[1000001];
int v[1000001],n;
void prefix()
{
int i,q;
q=0;
v[1]=0;
for(i=2;i<=n;i++) {
while((q)&&(c[i]!=c[q+1]))
q=v[q];
if(c[i]==c[q+1])
q++;
v[i]=q;
}
}
int main ()
{
int t,i,j,max;
freopen("prefix.in","r",stdin);
ofstream g("prefix.out");
scanf("%d",&t);
gets(c);
for(i=1;i<=t;i++) {
gets(c);
n=strlen(c)-1;
for(j=n;j>=0;j--)
c[j+1]=c[j];
c[0]=' ';
n++;
prefix();
max=0;
for(j=1;j<=n;j++)
if((v[j])&&(j%(j-v[j])==0)&&(j>max))
max=j;
g<<max<<'\n';
}
fclose(stdin);
g.close();
return 0;
}