Cod sursa(job #1426049)

Utilizator DenisacheDenis Ehorovici Denisache Data 28 aprilie 2015 21:21:29
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
//#include <conio.h>
#define pb push_back
#define mp make_pair
#define MOD 1000000007
#define newl printf("\n")
using namespace std;
int T,n,pi[1000005];
char a[1000005];
void make_prefix()
{
    pi[1]=0;
    int k=0;
    for (int i=2;i<=n;i++)
    {
        while (k>0 && a[i]!=a[k+1]) k=pi[k];
        if (a[i]==a[k+1]) k++;
        pi[i]=k;
    }
}
int solve()
{
    for (int i=n;i>0;i--)
        if (pi[i] && i%(i-pi[i])==0)
            return i;
    return 0;
}
int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    scanf("%d\n",&T);
    while (T--)
    {
        gets(a+1); n=strlen(a+1);
        make_prefix();
        printf("%d\n",solve());
    }
    return 0;
}