Pagini recente » Istoria paginii utilizator/robertpop99 | Profil Mircea_yo | Istoria paginii utilizator/alinhouse | Istoria paginii utilizator/mihneak | Cod sursa (job #1005280)
#include <fstream>
#include <cstring>
using namespace std;
char sir[1000005];
int pref[1000005];
int main()
{
ifstream cin("prefix.in");
ofstream cout("prefix.out");
int n,i,t=0,j,k;
cin>>t;
cin.get();
for(i=0;i<t;i++)
{
cin.get(sir,1000005);
cin.get();
n=strlen(sir);
pref[0]=0;
k=0;
for(j=1;j<n;j++)
{
while(k>0 && sir[j]!=sir[k])
k=pref[k-1];
if(sir[j]==sir[k])
k++;
pref[j]=k;
}
for(j=n-1;j>=0;j--)
if(pref[j]>0 && (j+1)%((j+1)-pref[j])==0)
break;
cout<<j+1<<'\n';
}
cin.close();
cout.close();
return 0;
}