Pagini recente » Cod sursa (job #2319090) | Cod sursa (job #2835986) | Cod sursa (job #2175458) | Cod sursa (job #2539801) | Cod sursa (job #2729441)
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
const int N=1e6+1;
char a[N];
int pred[N];
int main()
{
int t,lung;
in>>t;
for(int k=1; k<=t; k++)
{
in>>(1+a);
int n=strlen(1+a),ans=0;
pred[1]=0;
lung=0;
for(int i=2; i<=n; i++)
{
while(lung>0 && a[i]!=a[lung+1])
{
lung=pred[lung];
}
if(a[i]==a[lung+1])
{
lung++;
}
pred[i]=lung;
if(lung>0 && i%(i-lung)==0)
{
ans=max(ans, i);
}
}
/*for(int i=1; i<=n; i++)
{
out<<pred[i]<<" ";
}*/
out<<ans<<"\n";
}
return 0;
}