Pagini recente » Cod sursa (job #1680677) | Cod sursa (job #361525) | Cod sursa (job #1300521) | Cod sursa (job #1673784) | Cod sursa (job #1169788)
#include <fstream>
#include <cstring>
using namespace std;
int T;
char S[1000012];
int pi[1000012],N,i,k;
ifstream f("prefix.in");
ofstream g("prefix.out");
int solve()
{
int N=strlen(S+1);
memset(pi,0,sizeof(pi));
int k=0,i;
for (i=2;i<=N;i++)
{
if ((k>0) && S[k+1]!=S[i]) k=pi[k];
if (S[k+1]==S[i]) k++;
pi[i]=k;
}
for (i=N;i>=2;i--)
if (pi[i] && i%(i-pi[i])==0 && (i-p[i])) return i;
return 0;
}
int main()
{
f>>T;
f.get();
while(T--)
{
f.get(S+1,1000011);
f.get();
g<<solve()<<'\n';
}
f.close();
g.close();
return 0;
}