Cod sursa(job #2552533)
Utilizator | Data | 20 februarie 2020 22:30:03 | |
---|---|---|---|
Problema | Prefix | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 0.56 kb |
#include <bits/stdc++.h>
#define N 1000005
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
int urm[N];
char p[N];
int main()
{int i,j,n,nr,sol,k;
fin>>nr;
fin.get();
for(i=1;i<=nr;++i)
{fin.getline(p+1,N);
n=strlen(p+1);
sol=k=0;
for(j=2;p[j];++j)
{while(k>0 && p[j]!=p[k+1])
k=urm[k];
if(p[j]==p[k+1])
k++;
urm[j]=k;
if(urm[j]!=0 && j%(j-urm[j])==0)
sol=j;
}
fout<<sol<<'\n';
}
return 0;
}