Cod sursa(job #586493)

Utilizator cosgbCosmin cosgb Data 2 mai 2011 09:16:14
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>
#include <string.h>


void prefix (int m, int l[], char P[])
{int q,k;
	l[0]=0;
for (q=1;q<m;q++)
  { k=l[q-1];
   while (k>0 && P[k]!=P[q])
      k=l[k];
   if (P[k]==P[q])
     k=k+1;
  l[q]=k;
  }
}

void kmp (int n,int m, char T[],char P[])
{int k,t,l[2000001];
	k=0;
prefix(m,l,P);
int contor=0;
for (t=0;t<n;t++) 
{
   while (k>0 &&P[k]!=T[t])
      k=l[k];
   if (P[k]==T[t])
     k=k+1;
   if (k==m&&contor<1000) {
    printf ("deplasamentul %d e corect\n",t+1-m);
     k=l[k-1];
   contor++;}
}
}

int main()
{ freopen ("strmatch.in","r",stdin);
  freopen ("strmatch.out","w",stdout);
  int n,m;
  char T[2000001],P[2000001];
  gets(T);
  gets(P);
  n=strlen(T);
  m=strlen(P);
  kmp(n,m,T,P);
return 0;
}