Cod sursa(job #1317300)
Utilizator | Data | 14 ianuarie 2015 19:48:01 | |
---|---|---|---|
Problema | Prefix | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.62 kb |
#include<fstream>
#include<cstring>
using namespace std;
#define NMAX 1000005
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int n,m,k,p[NMAX];
char a[NMAX];
int main()
{
int i,j;
fin>>n; fin.get();
for (j=1;j<=n;++j)
{
fin>>(a+1);
m=strlen(a+1);
for (k=0,i=2;i<=m;++i)
{
while (a[k+1]!=a[i] && k>0)
k=p[k];
if (a[k+1]==a[i])
++k;
p[i]=k;
}
for (i=m;i>0;--i)
if (i%(i-p[i])==0 && p[i])
break;
fout<<i<<"\n";
}
return 0;
}