Cod sursa(job #2561643)

Utilizator ioana.jianuIoana Jianu ioana.jianu Data 29 februarie 2020 00:55:15
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

const int NMAX = 1000005;
char s[NMAX];
int Pi[NMAX];

int main() {

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

    int i, n, now, rez, q, j;

    scanf ("%d", &q);
    for (j = 1; j <= q; j++) {
        scanf ("%s", s);
        n = strlen(s);
        for (i = n; i >= 1; i--)
            s[i] = s[i - 1];

        rez = 0;
        for (i = 2; i <= n; i++) {
            now = Pi[i - 1];
            while (now > 0 && s[now + 1] != s[i])
                now = Pi[now];
            if (s[now + 1] == s[i])
                now++;
            Pi[i] = now;
            if (Pi[i] != 0 && i % (i - Pi[i]) == 0)
                rez = i;
        }
        printf ("%d\n", rez);
    }
    return 0;
}