Cod sursa(job #1129569)

Utilizator dspMihaiDespotovici Mihai dspMihai Data 27 februarie 2014 23:21:41
Problema Aho-Corasick Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;

int urmator[10001];
char x[1000001];
char p[10001];
long i,j,m,n;
void urmatorul (char *p)
{
	int i,j;
	urmator[0]=-1;
	for (i=1, j=0; i<n; i++,j++, urmator[i]=j)
		while (j>=0 and p[j]!=p[i])
			j=urmator[j];
}

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

int main ()
{
	int nr;
	long pkmp;
	ifstream f("ahocorasick.in");
	FILE *g;
	g=fopen("ahocorasick.out", "w");
	
	f>>x;
	f>>nr;
	m=strlen(x);
	for (;nr>0;--nr)
	{
		f>>p;
		n=strlen(p);
		urmatorul(p);
		pkmp=kmp();
		fprintf(g, "%d\n", pkmp);
	}
	f.close(); fclose(g);
	return 0;
}