Cod sursa(job #1204245)

Utilizator Pintilie_AndreiFII-Pintilie Andrei Pintilie_Andrei Data 2 iulie 2014 14:23:12
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <cstdio>
#include <cstring>
using namespace std;
char s[1000003];
int pi[1000003];
int t;
int Prefix()
{
    int n,i,k=0;
    n=strlen(s+1);
    pi[1]=0;
    for(i=2; i<=n; i++)
    {
        while(k>0 && s[k+1]!=s[i])
            k=pi[k];
        if(s[k+1]==s[i])
            k++;
        pi[i]=k;
    }


//    for(i=1; i<=n; i++)
//        printf("%d ",pi[i]);


    for(i=n; i>=1; i--)
        if(pi[i]>0 && i%(i-pi[i])==0)
   return i ;
   return 0;
  //printf("\n");
}
int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    scanf("%d",&t);
   // printf("%d",t);
    for(int i=1; i<=t; i++)
    {
        scanf("%s",(s+1));
        printf("%d\n",Prefix() );
    }
    return 0;
}