Pagini recente » Cod sursa (job #719661) | Cod sursa (job #1665346) | Cod sursa (job #1749962) | Cod sursa (job #964969) | Cod sursa (job #1553136)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1000000 + 5;
int phi[NMAX];
int N;
char a[NMAX];
int len=0;
void KMP ()
{
int k;
phi[1]=0;
for (int i = 2; i<=len; ++i)
{
k=phi[i-1];
while(k>0&&a[i]!=a[k+1])
k=phi[k];
if (a[i]==a[k+1])phi[i]=k+1;
else phi[i]=0;
}
}
inline void wr()
{
for (int i = len; i>=1; --i)
{
if (phi[i]>0&&i%(i-phi[i])==0)
{
printf("%d\n", i);
//memset(phi,0,len);
return ;
}
}
//memset(phi,0,len);
printf("0\n");
return ;
}
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d\n", &N);
for (int i = 1; i<=N ; ++i)
{
gets(a+1);
len=strlen(a+1);
KMP();
wr();
}
return 0;
}