Cod sursa(job #99279)

Utilizator razvi9Jurca Razvan razvi9 Data 11 noiembrie 2007 09:00:39
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 0.69 kb
#include<stdio.h>
#include<string.h>
char M[10000010],a[2000000],N[50],pi[50];

void PI()
{int k=0,i,n=strlen(N);
 pi[0]=pi[1]=0;
 for(i=1;i<n;i++)
 {while(k>0&&N[k]!=N[i])
   k=pi[k];
  if(N[k]==N[i]) k++;
  pi[i+1]=k;}
}
int KMP()
{int n=strlen(N),m=strlen(M),i,k=0,nr=0;
 PI();
 for(i=0;i<m;i++)
 {while(k>0&&N[k]!=M[i])
   k=pi[k];
  if(N[k]==M[i]) k++;
  if(k==n) nr++; }
 return nr;
}
long long num;
int main()
{freopen("abc2.in","r",stdin);
 freopen("abc2.out","w",stdout);
 scanf(" %s ",M);
 while(!feof(stdin))
 {scanf(" %s ",N);
  if(!strstr(a,N))
   {strcat(a,N);
    a[strlen(a)]=' ';
     num=num+KMP();}
 }
 printf("%lld",num);
 fclose(stdout);
 return 0;}