Cod sursa(job #1593246)

Utilizator LucianTLucian Trepteanu LucianT Data 8 februarie 2016 14:18:08
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <bits/stdc++.h>
#define maxN 1000100
using namespace std;
char s[maxN];
int pi[maxN];
int n,t,i,k;
void KMP()
{
    k = 0;
    gets(s+1);
    n = strlen(s+1);
    for(i = 2; i <= n; i++)
    {
        while(k && s[i] != s[k+1])
            k = pi[k];
        if(s[i] == s[k+1])
            k++;
        pi[i] = k;
    }
    for(i = n; i > 1; i--)
    {
        int val = i-pi[i];
        if(pi[i] && i%val == 0)
        {
            printf("%d\n", i);
            return;
        }
    }
    printf("0\n");
}
int main()
{
    freopen("prefix.in", "r", stdin);
    freopen("prefix.out", "w", stdout);
    scanf("%d\n", &t);
    while(t--)
        KMP();
    return 0;
}