Pagini recente » Cod sursa (job #3350583) | Cod sursa (job #3326801) | Cod sursa (job #3332045) | Borderou de evaluare (job #1974273) | Cod sursa (job #3333737)
//prefix.cpp
#include<bits/stdc++.h>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int p=32713, mod=1000003;
long long x,t,maxim=0,pp[1000001],s[1000001],k,rez,cs,cd,nr,rezcscd,l=0,lungime,y,d,stop;
char a[1000001];
int main()
{
f>>t;
pp[0]=1;
for(x=1;x<=1000000;x++)
pp[x]=(pp[x-1]*p)%mod;
for(x=1;x<=t;x++)
{
f>>a;
lungime=strlen(a);
maxim=0;
s[1]=a[0]-'0';
for(k=2;k<=lungime;k++)
{s[k]=(s[k-1]*p+(a[k-1]-'0'))%mod;}
for(k=1;k<=lungime/2;k++)
{
rez=s[k];
cs=k+1;
cd=2*k;
nr=1;
stop=0;
rezcscd=(s[cd]-(s[cs-1]*pp[k])%mod+mod)%mod;
for(cs=k+1;cs<=lungime-k+1&&stop==0;cs+=k,cd+=k)
{
rezcscd=(s[cd]-(s[cs-1]*pp[k])%mod+mod)%mod;
if(rez==rezcscd)
{
nr++;
}
else
stop=1;
}
if(nr>1)
{
l=k*nr;
if(l>maxim)
maxim=l;
}
}
g<<maxim<<endl;
for(y=1;y<=lungime;y++)
s[y]=0;
}
f.close();
g.close();
return 0;
}