Cod sursa(job #857511)

Utilizator assa98Andrei Stanciu assa98 Data 17 ianuarie 2013 21:34:42
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>
#include <cstring>

int n;
int p[1000100];
char s[1000100];

void prefix()
{
    int x=0;
    for(int i=2;i<=n;i++)
    {
        while(x>0&&s[x+1]!=s[i])
            x=p[x];
        if(s[x+1]==s[i])
            x++;
        p[i]=x;
    }
}

int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    int t;
    s[0]=' ';
    for(scanf("%d",&t);t;t--)
    {
        scanf("%s",s+1);
        //puts(s+1);
        n=strlen(s)-1;
        prefix();
        //for(int i=1;i<=n;i++)
          //  printf("%d ",p[i]);
        bool pp=false;
        for(int i=n;i>0;i--)
          if(i!=p[i]&&i%(i-p[i])==0&&p[i]!=0)
            {
                printf("%d\n",i);
                pp=true;
                i=-1;
            }
        if(!pp)
            printf("0\n");
    }
    return 0;
}