Cod sursa(job #229322)

Utilizator luk17Luca Bogdan luk17 Data 9 decembrie 2008 21:33:52
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<stdio.h>
#include<string.h>
#define NMAX 10000010
#define NMAX2 30
int n,m;
char b[NMAX],d[50010][NMAX2];
struct nod
{
	char key;
	nod *a,*b,*c;
};
nod *dict;
nod* insereaza(char ch,nod *p)
{
	nod *q=new nod();
	q->key=ch;
	q->a=q->b=q->c=NULL;
	if(ch=='a')
		if(p->a==NULL)
			p->a=q;
		else
			q=p->a;
	else
		if(ch=='b')
			if(p->b==NULL)
				p->b=q;
			else
			q=p->b;
		else
			if(ch=='c')
				if(p->c==NULL)
					p->c=q;
				else
				  q=p->c;
return q;		
}
int main()
{
	FILE *f;
	nod *p;
	int i,j;
	f=fopen("abc2.in","r");
	dict=new nod();
	dict->a=dict->b=dict->c=NULL;
	if(f==NULL)return -1;
	fscanf(f,"%s\n",b);
	fscanf(f,"%s\n",d[1]);
	m=strlen(d[1]);
	p=dict;
	n=2;
	for(i=0;i<m;i++)
		p=insereaza(d[1][i],p);
	while(!feof(f))
	{
		fscanf(f,"%s\n",d[n]);
		p=dict;
		for(i=0;i<m;i++)
			p=insereaza(d[n][i],p);
		n++;

	}
	int contor=0;
	int lung=strlen(b);
	for(i=0;i<=lung-m;i++)
	{
		p=dict;
		for(j=i;j<i+m;j++)
		{
			if(b[j]=='a')
				p=p->a;
			else
			if(b[j]=='b')
				p=p->b;
			else
			if(b[j]=='c')
				p=p->c;
		}
		if(j==i+m&&p!=NULL)contor++;
	}
	freopen("abc2.out","w",stdout);
	printf("%d",contor);
	return 0;
}