Cod sursa(job #1625012)
Utilizator | Alexandru Pascadi alexpascadi | Data | 2 martie 2016 15:56:27 |
---|---|---|---|
Problema | Prefix | Scor | 90 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.61 kb |
#include <fstream>
using namespace std;
const int N = 1000001;
char v[N];
int pred[N];
int main()
{
ifstream in("prefix.in");
ofstream out("prefix.out");
int t,i,j,k,rez;
in>>t>>ws;
for(i=0;i<t;i++)
{
in.getline(v+1,N);
pred[1]=0; k=0;
rez=0;
for(j=2;v[j];j++)
{
while(k>0 && v[j]!=v[k+1])
k=pred[k];
if(v[j]==v[k+1])
k++;
pred[j]=k;
//out<<pred[j]<<" ";
if(pred[j]!=0 && j%(j-pred[j])==0)
rez=j;
}
out<<rez<<"\n";
}
return 0;
}