Pagini recente » Cod sursa (job #520905) | Cod sursa (job #1548818) | Cod sursa (job #2283896) | Cod sursa (job #622042) | Cod sursa (job #3331926)
#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;
lung_pref=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;
}