Pagini recente » Cod sursa (job #1946622) | Cod sursa (job #2673396) | Cod sursa (job #2255988) | Cod sursa (job #1812262) | Cod sursa (job #1809494)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int q1=100007,q2=100021;
char s[1000001];
int trist(int k)
{
int x=0,y=0,xs,ys,ok,j,i;
for(i=0; i<k; i++)
{
x=((x*128)%q1+s[i])%q1;
y=((y*128)%q2+s[i])%q2;
}
ok=1;
j=1;
while(ok&&j<=strlen(s)/k)
{
xs=0;
ys=0;
for(i=j*k;i<(j+1)*k;i++)
{
xs=((xs*128)%q1+s[i])%q1;
ys=((ys*128)%q2+s[i])%q2;
}
if(xs==x&&ys==y) j++;
else ok=0;
}
if(j>1) return j*k;
return 0;
}
int main()
{
int maxi=0,n,i,j;
f>>n;
f.get();
for(i=1;i<=n;i++)
{
maxi=0;
f.getline(s,1000001);
for(j=1;j<=strlen(s)/2;j++)
{
if(trist(j)>maxi) {maxi=trist(j);}
}
g<<maxi<<'\n';
}
}