Pagini recente » Cod sursa (job #2588902) | Cod sursa (job #2690603) | Cod sursa (job #2380605) | Cod sursa (job #246233) | Cod sursa (job #2359732)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
char a[1000001];int q[1000001];
int n,Q,l;
void INIQ()
{
q[1]=0;int j=0;
for(int i=2;i<=n;++i)
{
while(a[j+1]!=a[i]&&j>0)j=q[j];
if(a[j+1]==a[i])++j;
q[i]=j;
}
}
int main()
{
for(f>>Q;Q>0;--Q)
{
f>>(a+1);a[0]=' ';n=strlen(a)+1;
INIQ();
for(l=n;l>0;--l)if(q[l]>=(l+1)/2){while(l%(l-q[l])!=0)--l;break;}
g<<l<<'\n';
}
}