Pagini recente » Cod sursa (job #56268) | Cod sursa (job #1159975) | Cod sursa (job #1708317) | Cod sursa (job #73534) | Cod sursa (job #2672575)
#include <fstream>
#include <cstring>
using namespace std;
ifstream in ("prefix.in");
ofstream out ("prefix.out");
int n,i,v[1000002],cmax,nr,m;
char p[1000002];
void construire (char p[])
{
v[0]=0;
int k=0;
for(int q=1;q<m;q++)
{
while((k>0)&&(p[k]!=p[q]))
{
k=v[k-1];
}
if(p[k]==p[q])
{
k++;
}
v[q]=k;
if(v[q]>0&&!((q+1)%(q-v[q]+1)))cmax=q+1;
}
}
int main()
{
in>>n;
in.get();
for(i=1;i<=n;i++)
{
in.getline(p,10000002);
m=strlen(p);
cmax=0;
construire(p);
out<<cmax<<'\n';
memset(v,0,sizeof(v));
}
return 0;
}