Cod sursa(job #177868)

Utilizator CezarMocanCezar Mocan CezarMocan Data 13 aprilie 2008 18:51:08
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#include <string.h>
using namespace std;

long t,i,j,q,n,pi[1000100],mx,x;
char s[1000001];

int main(){
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d",&t);
for (q=1;q<=t;q++)
    {
    memset(pi,0,sizeof(pi));
    scanf("%s",s);
    n=strlen(s);    
    for (i=n-1;i>=0;i--)
        s[i+1]=s[i];
    pi[0]=-1;
    pi[1]=0;
    for (i=2;i<=n;i++)
        {
        x=pi[i-1];
        if (s[x+1]==s[i])
            pi[i]=x+1;    
        else
            {
            while (x>=0)
                {
                x=pi[x];
                if (x<0)
                    break;
                if (s[x+1]==s[i])
                    {
                    pi[i]=x+1;
                    break;    
                    }    
                }    
            }
        }
    mx=0;
    for (i=1;i<=n;i++)
        if ((i/(i-pi[i])>=2)&&(i%(i-pi[i])==0))
            mx=i;
    printf("%d\n",mx);
    }
return 0;    
}