Cod sursa(job #1193414)

Utilizator ZenusTudor Costin Razvan Zenus Data 31 mai 2014 18:15:07
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <cstdio>
#include <cstring>

using namespace std;

#define NMAX 1000005

int pi[NMAX];
int T;
char S[NMAX];

int solve()
{
    int i,k=0,N=strlen(S+1);
    memset(pi,0,sizeof(pi));

    for (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;
    }

    for (i=N;i>=2;--i)
    {
        if (!pi[i] || !(i-pi[i])) continue;
        if (i%(i-pi[i])) continue;

        return i;
    }

    return 0;
}

int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);

scanf("%d\n",&T);

while (T--)
{
    gets(S+1);
    printf("%d\n",solve());
}

return 0;
}