Cod sursa(job #1716785)

Utilizator antanaAntonia Boca antana Data 13 iunie 2016 18:42:04
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
#include<string.h>
#define MAX 1000000
using namespace std;
char s[MAX+2];
int pi[MAX+1];
int main()
{
    freopen("prefix.in", "r", stdin);
    freopen("prefix.out", "w", stdout);
    int pr=0, t, n, k;
    scanf("%d\n", &t);
    for(int a=1;a<=t;++a)
    {
        pr=0;
        gets(s+1);
        n=strlen(s+1);
        pi[1]=0;
        k=0;
        for(int i=2;i<=n;++i)
        {
            while(k && s[k+1]!=s[i])
                k=pi[k];
            if(s[k+1]==s[i])
                ++k;
            pi[i]=k;
        }
        int f=0;
        for(int i=n;i>1 && (!f);--i)
            if(!(i % (i-pi[i])) && pi[i]!=0 && (2*pi[i]>=i))
                f=1, pr=i;
        printf("%d\n", pr);
    }
    return 0;
}