Cod sursa(job #1679036)

Utilizator crysstyanIacob Paul Cristian crysstyan Data 7 aprilie 2016 17:25:12
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <cstring>
#define NMAX 1000005

using namespace std;

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

int i, n, nrquiz, pi[NMAX], j, ans, k;
char c[NMAX];

int main()
{
    f >> nrquiz;

    for (; nrquiz; -- nrquiz)
    {
        f >> (c + 1);
        n = strlen(c + 1);
        ans = 0;
        k = 0;

        memset(pi, 0, sizeof(pi));

        for (i = 2; i <= n; ++ i)
        {
            while (k && c[i] != c[k + 1])
                k = pi[k];

            if (c[i] == c[k + 1])
                k ++;

            pi[i] = k;
        }

        i = n;

        for (i = n; i >= 1; -- i)
            if (pi[i] != 0 && pi[i] % (i - pi[i]) == 0)
            {
                ans = i;
                break;
            }

        g << ans << '\n';
    }
    return 0;
}