Pagini recente » Cod sursa (job #1700139) | Cod sursa (job #3192475) | Cod sursa (job #1954937) | Cod sursa (job #434679) | Cod sursa (job #574613)
Cod sursa(job #574613)
#include <Fstream>
using namespace std;
const char InFile[]="prefix.in";
const char OutFile[]="prefix.out";
const int MaxN=1000111;
ifstream fin(InFile);
ofstream fout(OutFile);
int T,n,sol,p[MaxN];
char N[MaxN];
inline void prefix()
{
n=strlen(N+1);
sol=0;
int k=0;
p[1]=0;
for(register int i=2;i<=n;++i)
{
while(k>0 && N[k+1]!=N[i])
{
k=p[k];
}
if(N[k+1]==N[i])
{
++k;
}
p[i]=k;
if(k!=0)
{
if(i%(i-k)==0)
{
sol=i;
}
}
}
}
int main()
{
fin>>T;
for(register int t=1;t<=T;++t)
{
fin>>(N+1);
prefix();
fout<<sol<<"\n";
}
fin.close();
fout.close();
return 0;
}