Cod sursa(job #1164399)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 2 aprilie 2014 00:57:51
Problema Prefix Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int NMax = 1000010;

int N;
char A[NMax];
int pi[NMax];

void Make_Pi()
{
    int k = 0;
    pi[1] = 0;
    N = 1;
    for (int i = 2; A[i] != 0; ++ i)
    {
        ++N;
        while ( k > 0 && A[k + 1] != A[i])
            k = pi[k];
        if (A[k + 1] == A[i])
            ++ k;
        pi[i] = k;
    }
}

int main()
{
    FILE *f = fopen("prefix.in", "r");
    FILE *g = fopen("prefix.out", "w");
    int nr_tests;
    fscanf (f, "%d", &nr_tests);
    while (nr_tests -- )
    {
        fscanf(f, "%s", A + 1);
        Make_Pi();
        int ans = 0;
        for (int i = 2; i <= N; ++ i)
            if (pi[i] != 0 && i % (i - pi[i]) == 0)
                ans = max(ans, i);
        fprintf(g, "%d\n", ans);
    }
    fclose(f);
    fclose(g);
    return 0;
}