Cod sursa(job #2058212)

Utilizator CammieCamelia Lazar Cammie Data 5 noiembrie 2017 12:08:50
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
#include <cstring>

#define MAXN 1000012

using namespace std;

ifstream fin("prefix.in");
ofstream fout("prefix.out");

char P[MAXN];
int pi[MAXN];

inline int Det_pi() {
    int N = strlen(P + 1), x;

    int k = 0, maxim = 0; pi[k] = 0;

    for (int j = 2; j <= N; j++) {
        while (P[j] != P[k + 1] && k > 0)
            k = pi[k];
        if (P[j] == P[k + 1])
            k++;
        pi[j] = k;
    }

    for (int j = N; j >= 2; j--) {
        if (pi[j] != 0) {
            x = j - pi[j];

            if (j % x == 0) {
                return j;
            }
        }
    }
    return 0;
}

inline void Read() {
    int n;

    fin >> n;

    for (int i = 1; i <= n; i++) {
        fin >> (P + 1);

        fout << Det_pi() << "\n";
    }
}

int main () {
    Read();

    fin.close(); fout.close(); return 0;
}