Cod sursa(job #935653)

Utilizator mvcl3Marian Iacob mvcl3 Data 4 aprilie 2013 13:15:11
Problema Prefix Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <cstring>
#define MAX_SIZE 1000009
using namespace std;

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

int t, m, n, ok, pi[MAX_SIZE];
char A[MAX_SIZE];

inline void prefix() {
    int k = 0;
    ok = 0;

    for(int q = 2; q <= n; ++q) {
        while(k > 0 && A[k + 1] != A[q]) k = pi[k];

        if(A[k + 1] == A[q]) ++ k;

        pi[q] = k;
    }
}

int main() {
    f >> t;
    f.getline(A, MAX_SIZE);

    for(; t; t --) {
        f.getline(A, MAX_SIZE);
        n = strlen(A);

        for(int i = n; i >= 1; --i) A[i] = A[i - 1];

        prefix();

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

        g << m << '\n';
        memset(pi, 0, sizeof(pi));
        }
    g.close();
    return 0;
}