Cod sursa(job #2068659)

Utilizator EuAlexOtaku Hikikomori EuAlex Data 18 noiembrie 2017 10:15:42
Problema Prefix Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>
#include <cstring>

using namespace std;

char s[1000005];
int n, pre[1000005];

void buildPre() {
    int len = 0, i = 1;
    while(i < n) {
        if(s[len] == s[i]) {
            pre[i] = pre[i - 1] + 1;
            ++ i;
            ++ len;
        } else {
            if(len == 0) {
                pre[i] = 0;
                ++ i;
            } else {
                len = pre[len - 1];
            }
        }
    }
}

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

    int t;
    scanf("%d\n", &t);

    while(t --) {
        gets(s);
        n = strlen(s);
        buildPre();

        int rasp = 0;
        for(int p = n - 1; p >= 1; -- p) {
            if(pre[p] > 0 && (p + 1) % (p + 1 - pre[p]) == 0) {
                rasp = p + 1;
                break;
            }
        }

        printf("%d\n", rasp);
    }

    return 0;
}