Cod sursa(job #1726461)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 8 iulie 2016 04:16:41
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
///PROMIT CA MAINE MA CULC DEVREME!
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 1000005;

char str[NMAX];
int   pi[NMAX];

int pkmp(int n) {
    int ans = 0,
        q   = 0;

    for(int i=2; i<=n; ++i) {
        while(q>0 && str[q+1]!=str[i])
            q = pi[q];
        if(str[q+1]==str[i])
            ++q;
        pi[i] = q;

        if(pi[i] && i%(i-pi[i])==0)
            ans = i;
    }

    return ans;
}

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

    scanf("%d",&t);
    while(t--) {
        scanf("%s",str+1);
        printf("%d\n",pkmp(strlen(str+1)));
    }

    fclose(stdin);
    fclose(stdout);
    return 0;
}