Cod sursa(job #778971)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 16 august 2012 13:39:28
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
#define mod 11003
vector <unsigned int> v[mod];
char c[1000010],sir[25];
inline int cauta(unsigned int x)
{
	int k;
	k=x%mod;
	for(vector <unsigned int> :: iterator it=v[k].begin();it!=v[k].end();it++)
		if(*it==x) 
			return 1;
	return 0;
}
inline void adauga(unsigned int x)
{
	if(cauta(x))
		return ;
	v[x%mod].push_back(x);
}
int main ()
{
	int i,n,m,p,nr;
	unsigned int x;
	freopen("abc2.in","r",stdin);
	freopen("abc2.out","w",stdout);
	fgets(c,sizeof(c),stdin);
	n=strlen(c)-2;
	m=-1;
	while(feof(stdin)==0) {
		fgets(sir,sizeof(sir),stdin);
		if(m==-1)
			m=strlen(sir)-2;
		x=0;
		for(i=0;i<=m;i++)
			x=x*3+sir[i]-'a';
		adauga(x);
	}
	fclose(stdin);
	p=1;
	for(i=1;i<=m;i++)
		p=p*3;
	x=0;
	for(i=0;i<=m;i++) 
		x=x*3+c[i]-'a';
	nr=cauta(x);
	for(i=m+1;i<=n;i++) {
		x=3*(x-p*(c[i-m-1]-'a'))+c[i]-'a';
		nr=nr+cauta(x);
	}
	printf("%d",nr);
	fclose(stdout);
	return 0;
}