Cod sursa(job #942393)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 22 aprilie 2013 11:31:43
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int n, pi[1000010], lg;
char a[1000010];

inline void kmp()
{
    int k = 0, i;
    pi[1] = 0;
    for (i = 2; i<=lg; i++)
    {
        while (k && a[k+1] != a[i])
            k = pi[k];
        if (a[k+1] == a[i])
            k++;
        pi[i] = k;
    }
}

int main()
{
    ifstream f("prefix.in");
    ofstream g("prefix.out");
    f>>n;
    int i;
    bool gasit;
    while (n--)
    {
        f>>(a+1);
        lg = strlen(a+1);
        kmp();
        gasit = false;
        for (i=lg; i && !gasit; i--)
        {
            if (pi[i] && i%(i-pi[i]) == 0)
            {
                g<<i<<"\n";
                gasit = true;
            }
        }
        if (!gasit)
            g<<"0\n";
    }
    f.close();
    g.close();
    return 0;
}