Cod sursa(job #2482970)

Utilizator MarianConstantinMarian Constantin MarianConstantin Data 29 octombrie 2019 09:01:54
Problema Prefix Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

const int MAXN = 1000010;
char str[MAXN];
int len[MAXN], n, t;

int solve() {
    int max = 0;
    len[1] = 0;
    for (int i = 2, j = 0; i <= n; ++i) {
        while (j && str[j + 1] != str[i])
            j = len[j];
        if (str[j + 1] == str[i]) {
            len[i] = ++j;
            int k = i - len[i];
            if (i % k == 0 && max < i)
                max = i;
        }
    }
    return max;
}

/**int findLength() {
    int max = 0;
    for (int i = 1; i <= n; ++i) {
        int k = i - len[i];
        if (i % k == 0 && max < i && len[i])
            max = i;
    }
    return max;
}*/

int main() {
    ifstream fin("prefix.in");
    ofstream fout("prefix.out");
    fin >> t;
    fin.get();
    for (int i = 0; i < t; ++i) {
        fin.getline(str + 1, MAXN);
        n = strlen(str + 1);
        fout << solve() << '\n';
    }
    return 0;
}