Cod sursa(job #1301692)

Utilizator danalex97Dan H Alexandru danalex97 Data 26 decembrie 2014 12:23:46
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>
#include <cstring>
using namespace std;

const int N = 1000010;

int t,n,pi[N];
char a[N];

int solve(char a[],int n)
{
    int p = 0;
    for (int i=2;i<=n;++i)
    {
        while ( p>0 && a[i] != a[p+1] )
            p = pi[p];
        if ( a[i] == a[p+1] )
            p++;
        pi[i] = p;
    }
    for (int i=n;i>=1;--i)
        if ( i % (i-pi[i]) == 0 )
            if ( 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-- )
    {
        scanf("%s",a+1);
        n = strlen(a+1);

        printf("%d\n",solve(a,n));
    }
}