Cod sursa(job #2059711)
Utilizator | Data | 7 noiembrie 2017 15:31:52 | |
---|---|---|---|
Problema | Prefix | Scor | 30 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.78 kb |
#include <iostream>
#include <fstream>
#include <cstring>
#define max 1000001
using namespace std;
int n,k,mx;
char s[max];
int pr[max];
int main()
{
ifstream f("prefix.in");
ofstream g("prefix.out");
f>>n;
for(int i=0;i<n;i++)
{
f>>(s+1);
k=mx=0;
memset(pr,0,max);
pr[1]=0;
for(int i=2;i<=strlen(s+1);i++)
{
while(k>0 && s[k+1]!=s[i])
k=pr[k];
if(s[k+1]==s[i])
k++;
pr[i]=k;
}
int j;
for(j=strlen(s+1);j>1;j--)
if(pr[j] && j%(j-pr[j])==0)
{
g<<j<<endl;
break;
}
if(j==1)
g<<0<<endl;
}
return 0;
}