Cod sursa(job #1164406)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 2 aprilie 2014 01:06:15
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int NMax = 1000010;

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

void Make_Pi()
{
    ans = 0;
    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();
        ans = 0;
        for (int i = N; i > 1; -- i)
            if (pi[i] != 0 && i % (i - pi[i]) == 0)
            {
                ans = i;
                break;
            }
        fprintf(g, "%d\n", ans);
    }
    fclose(f);
    fclose(g);
    return 0;
}