Pagini recente » Cod sursa (job #3231497) | Cod sursa (job #2624860) | Cod sursa (job #746586) | Cod sursa (job #2647735) | Cod sursa (job #2125206)
#include <bits/stdc++.h>
#define nmax 1000100
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int t,pi[nmax],i,k,n,streak,pozstart,ans;
char s[nmax];
int main()
{
fin>>t;
while(t)
{
fin>>s+1;
n=strlen(s+1);
pi[1]=0;
k=0;
for(i=2;i<=n;i++)
{
while(k>0&&s[k+1]!=s[i])
k=pi[k];
if(s[k+1]==s[i])k++;
pi[i]=k;
}
ans=0;pozstart=0;streak=0;
for(i=1;i<=n;i++)
{
if(streak)
{
if(pi[i]==streak+1){streak++;continue;}
if(streak>=pozstart-1)ans=max(ans,(streak/(pozstart-1)+1)*(pozstart-1));
if(pi[i]==1){streak=1;pozstart=i;}
else streak=0;
}
else if(pi[i]==1){streak=1;pozstart=i;}
}
if(streak>=pozstart-1)ans=max(ans,(streak/(pozstart-1)+1)*(pozstart-1));
fout<<ans<<'\n';
//for(i=1;i<=n;i++)
// fout<<pi[i]<<" ";
//fout<<'\n';
t--;
}
return 0;
}