Cod sursa(job #1128620)

Utilizator dspMihaiDespotovici Mihai dspMihai Data 27 februarie 2014 17:53:41
Problema Aho-Corasick Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
using namespace std;
char sir[1000001],crt[10002];
int urmator[10001];
long m;
int n;

void urmatorul ()
{
	int i,j;
	urmator[0]=-1;
	for (i=1,j=0; i<n; i++,j++, urmator[i]=j)
		while (j>=0 and crt[i]!=crt[j])
			j=urmator[j];
}

long kmp ()
{
	long i,j,k=0;
	for (i=0, j=0; i<m; i++, j++)
	{
		
		while (j>=0 and sir[i]!=crt[j])
			j=urmator[j];
		if (j==n-1) {k++;j=-1;}
	}
	return k;
}

int main ()
{
	int nr,i;
	ifstream f("ahocorasick.in");
	ofstream g("ahocorasick.out");
	//FILE *g;
	//g=fopen("ahocorasick.out", "w");
	f>>sir;
	m=strlen(sir);
	f>>nr;
	for (;nr>0; nr--)
	{
		f>>crt;
		n=strlen(crt);
		urmatorul();
		//for (i=0; i<=n; i++) g<<urmator[i]<<" ";
		g<<kmp();
		g<<"\n";
	}
	
	
	//cout<<m;
	f.close(); g.close();
	return 0;
}