Pagini recente » Borderou de evaluare (job #2667631) | Cod sursa (job #2811486) | Borderou de evaluare (job #2502237) | Cod sursa (job #77802) | Cod sursa (job #3331925)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
char s[1000001];
int pi[1000001],lung_pref;
int main()
{
int t;
fin>>t;
fin.getline (s,3);
for (int i=1; i<=t; i++)
{
fin.getline(s,1000000);
int n=strlen(s)-1,maxi=0;
for (int j=0; j<=n; j++)
pi[j]=0;
for (int j=1; j<=n; j++)
{
while (lung_pref>0 && s[j]!=s[lung_pref])
{
lung_pref=pi[lung_pref-1];
}
if (s[lung_pref]==s[j])
lung_pref++;
if ((j+1)%(j-lung_pref+1)==0 && lung_pref!=0)
{
maxi=max(maxi,j+1);
}
pi[j]=lung_pref;
}
fout<<maxi<<'\n';
}
return 0;
}