Cod sursa(job #1148244)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 20 martie 2014 17:06:36
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>

#include <cstring>
using namespace std;

const int MAX_LEN = 1000002;

int T, N;
int Pi[MAX_LEN];
char s[MAX_LEN];

void prefix() {
    for(int i = 2, p = 0; i <= N; ++i) {
        while(p > 0 && s[p + 1] != s[i])
            p = Pi[p];

        if(s[p + 1] == s[i])
            ++p;
        Pi[i] = p;
    }
}

int main() {
    ifstream f("prefix.in");
    ofstream g("prefix.out");
    
    s[0] = ' ';

    f >> T;
    for(int t = 1; t <= T; ++t) {
        f >> (s + 1);

        N = strlen(s);

        prefix();

        bool ok = 0;
        for(int j = N; j >= 1; --j)
            if(Pi[j] && j % (j - Pi[j]) == 0) {
                g << j << "\n";
                j = 1;
                ok = 1;
            }
        if(ok == 0)
            g << 0 << "\n";
    }

    f.close();
    g.close();

    return 0;
}