Cod sursa(job #2365815)

Utilizator AplayLazar Laurentiu Aplay Data 4 martie 2019 16:39:00
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
#include <cstring>

#define LENGTH_MAX 1000001

char text[LENGTH_MAX];
int T, prefix[LENGTH_MAX];

void doPrefix(char* text, int textLength, int* prefix) {
    int it = 1, k = 0;
    prefix[0] = 0;
    while (it < textLength) {
        if (text[it] == text[k]) {
            prefix[it++] = ++k;
        } else {
            if (0 < k) {
                k = prefix[k - 1];
            } else {
                prefix[it++] = 0;
            }
        }
    }
}

int main() {
    freopen("prefix.in", "r", stdin);
    freopen("prefix.out", "w", stdout);

    scanf("%d", &T);
    while (T--) {
        scanf("%s\n", text);
        int textLength = strlen(text);
        doPrefix(text, textLength, prefix);
        bool done = false;
        for (int it = textLength - 1; 0 < it; --it) {
            if (0 == (it + 1) % (it + 1 - prefix[it]) && 0 != prefix[it]) {
                done = true;
                printf("%d\n", it + 1);
                break;
            }
        }
        if (!done) printf("0\n");
    }

    return 0;
}