Cod sursa(job #1496077)

Utilizator nnnmmmcioltan alex nnnmmm Data 4 octombrie 2015 11:46:30
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<cstdio>
#include<algorithm>
#include<cstring>
char s[1000001];
int pi[1000001];
int main()
{
 freopen("prefix.in","r",stdin);
 freopen("prefix.out","w",stdout);
 int nr_teste;
 scanf("%d ",&nr_teste);
 for(int test=1;test<=nr_teste;test++)
     {
      scanf("%s",s+1);
      int n=strlen(s+1);
      int k=0;
      pi[0]=0;
      for(int 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;
          }
      /*for(int i=1;i<=n;i++)
          printf("%d ",pi[i]);
      printf("\n");*/
      int i=n;
      while(i!=0 && (pi[i]==0 || i%(i-pi[i])!=0))
            i--;
      printf("%d\n",i);
     }
 fclose(stdin);
 fclose(stdout);
return 0;
}