Cod sursa(job #1967983)

Utilizator mariakKapros Maria mariak Data 17 aprilie 2017 13:13:36
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>
#define maxN 1000002

FILE *fin = freopen("prefix.in", "r", stdin);
FILE *fout = freopen("prefix.out", "w", stdout);

using namespace std;
int T, N, pi[maxN];
char s[maxN];

void FailureFunction(){
    pi[0] = -1;
    int k = -1;
    for(int i = 1; i <= N; ++ i){
        while(k >= 0 && s[k + 1] != s[i])
            k = pi[k];
        pi[i] = ++ k;
    }
    for(int i = 1; i <= N; ++ i)
        s[i] = 0;
}

int main()
{
    scanf("%d\n", &T);
    while(T--){
        gets(s + 1);
        N = strlen(s + 1);
        FailureFunction();
        int i;
        for(i = N; i; -- i)
            if(pi[i] > 0 && pi[i] % (i - pi[i]) == 0)
                break;
        printf("%d\n", i);
    }
    return 0;
}