Cod sursa(job #508823)

Utilizator mraresMardare Rares mrares Data 9 decembrie 2010 18:36:29
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <iostream>
#include <cstring>
#define nmax 1000005

using namespace std;

ifstream fin("prefix.in");
ofstream fout("prefix.out");

int n, m;
char sir[nmax];
int pi[nmax];

int main()
{
    int i, j, k, rez;
    fin >> m;
    fin.get();
    for(i=1; i<=m; ++i)
    {
        fin.getline(sir, nmax);
        for(n=0; sir[n] >= 'a' && sir[n] <='z'; ++n);
        for(int j=n; j; --j) sir[j] = sir[j-1];
        sir[0] = ' ';
        for(j=0; j<=nmax; ++j) pi[j]=0;
        rez = 0;
        k = 0;
        pi[0] = 0;
        for(j=2; j<=n; ++j)
        {
            while(k && sir[k+1]!=sir[j])
                k = pi[k];
            if(sir[k+1]==sir[j])
                ++k;
            pi[j]=k;
            if(k && j%(j-k)==0)
                rez = j;
        }
        fout << rez << "\n";
    }
    return 0;
}