Cod sursa(job #854704)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 13 ianuarie 2013 21:06:19
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <fstream>
#include <cstring>
#define NM 1000010

using namespace std;

ifstream f("prefix.in");
ofstream g("prefix.out");

int T;
string S;
int N;
int i,j;
int PI[NM];

int main ()
{
    for (f >> T; T; --T)
    {
        f >> S;
        N=S.size();
        S=' '+S;

        memset(PI, 0, sizeof(PI));

        for (i=2, j=0; i<=N; i++)
        {
            while (j!=0 && S[j+1]!=S[i])
                j=PI[j];

            if (S[j+1]==S[i]) j++;

            PI[i]=j;
        }

        for (i=N; i>=1; i--)
            if (PI[i]!=0 && i%(i-PI[i])==0)
                break;

        g << i << '\n';
    }

    f.close();
    g.close();

    return 0;
}