Cod sursa(job #1121164)

Utilizator horatiu11Ilie Ovidiu Horatiu horatiu11 Data 25 februarie 2014 11:50:20
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
//horatiu11
# include <cstdio>
# include <cstring>
# define nmax 1000001
using namespace std;
int n,t,pi[nmax],sol,k;
char s[nmax],c;
inline void prefix()
{
    int i;
    pi[1]=0;k=0;sol=0;
    for(i=2;i<=n;++i)
    {
        while(k>0 && s[i]!=s[k+1])
            k=pi[k];
        if(s[i]==s[k+1])++k;
        pi[i]=k;
    }
    sol=0;
    for(i=n;i>1 && !sol;--i)
        if(pi[i] && !(i%(i-pi[i])) )sol=i;

}
int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    scanf("%d%c",&t,&c);
    while(t)
    {
        gets(s+1);n=strlen(s+1);
        prefix();
        printf("%d\n",sol);
        --t;
    }
    return 0;
}