Cod sursa(job #1303993)

Utilizator diana97Diana Ghinea diana97 Data 28 decembrie 2014 16:08:07
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;


const int NMAX = 1000000 + 1;
int F[NMAX];
char s[NMAX];

void proceseaza(char pattern[]) {
    F[1] = F[0] = 0;
    int k = 0;
    int n = strlen(pattern + 1);
    for (int q = 2; q <= n; q++) {
        while (k > 0 && pattern[k + 1] != pattern[q]) k = F[k];
        if (pattern[k + 1] == pattern[q]) k++;
        F[q] = k;
    }

}

int rezolva(char a[]) {
    int n = strlen(a + 1);
    proceseaza(a);
    for (int i = n; i >= 1; i--)
        if (i % (i - F[i]) == 0 && F[i] > 0) return i;
    return 0;
}

int main() {
    freopen("prefix.in", "r", stdin);
    freopen("prefix.out", "w", stdout);
    int t;
    scanf("%d", &t);
    while (t--) {
        scanf("%s", s + 1);
        //cout << s + 1 << endl;
        printf("%d\n", rezolva(s));
        //cout << rezolva(s) << '\n';
    }
}