Pagini recente » Cod sursa (job #3334768) | Cod sursa (job #3337898) | Cod sursa (job #3323739) | Cod sursa (job #3338510) | Cod sursa (job #3329029)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
string s;
int t,lps[1000005];
void buildPrefix(string A)
{
int i, k=0,sol=0,n;
n=A.size();
for (i=2; i<=n; i++)
{
while (k && A[k] != A[i-1]) k = lps[k];
if (A[k] == A[i-1]) k++;
lps[i]=k;
if(lps[i]>0&&i%(i-lps[i])==0)
sol=i;
}
for (i=1; i<n; i++) lps[i]=0;
g<<sol<<'\n';
}
int main()
{
f>>t;
for(int i=1;i<=t;i++)
{
f>>s;
buildPrefix(s);
}
return 0;
}