Cod sursa(job #930351)

Utilizator Catah15Catalin Haidau Catah15 Data 27 martie 2013 16:33:14
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>

using namespace std;

#define maxN 1000010

int P[maxN], leng;
string S;


void Compute_prefix ()
{
    memset (P, 0, sizeof (P));
    P[0] = - 1;
    P[1] = 0;

    for (int i = 2; i <= leng; ++ i)
    {
        int x = i - 1;
        while (x >= 1 && S[i - 1] != S[P[x]]) x = P[x];
        P[i] = P[x] + 1;
    }
}


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

    int T;
    f >> T;

    for (int i = 1; i <= T; ++ i)
    {
        f >> S;
        leng = S.length();

        Compute_prefix();

        bool ok = false;
        for (int sol = leng; sol >= 1; -- sol)
        {
            if (! P[sol]) continue;
            if (! (P[sol] % (sol - P[sol])))
            {
                g << sol << '\n';
                ok = true;
                break;
            }
        }

        if (! ok) g << "0 \n";
    }

    return 0;
}