Cod sursa(job #845258)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 30 decembrie 2012 18:05:06
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;

#define LMAX 105
#define alfa 53

struct trie {
	short fii;
	trie *urm[alfa];
};
typedef trie* TNOD;

TNOD rad;
int sol;
char cuv[LMAX];

inline TNOD creare()
{
	TNOD aux;
	aux=new trie;
	aux->fii=0;
	memset(aux->urm,0,sizeof(aux->urm));
	return aux;
}

inline void adauga(char *s, TNOD p)
{
	if(*s=='\n')
		return;
	if(p->urm[*s-'A']==0) {
		p->urm[*s-'A']=creare();
		p->fii++;
	}
	adauga(s+1,p->urm[*s-'A']);
}

void dfs(TNOD nod)
{
	int i;
	sol=sol+nod->fii;
	for(i=0;i<=alfa-1;i++)
		if(nod->urm[i])
			dfs(nod->urm[i]);
}

int main ()
{
	int n,i;
	ifstream f("dictree.in");
	ofstream g("dictree.out");
	f>>n;
	rad=creare();
	for(i=1;i<=n;i++) {
		memset(cuv,0,sizeof(cuv));
		f>>cuv;
		cuv[strlen(cuv)]='\n';
		adauga(cuv,rad);
	}
	f.close();
	g<<sol+1;
	g.close();
	return 0;
}