Cod sursa(job #750409)

Utilizator blk.irineluIrina Ursateanu blk.irinelu Data 22 mai 2012 00:56:15
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
#include <cstring>
#define caracter (*s-'a')

using namespace std;

ifstream f("trie.in");
ofstream g("trie.out");

char cuvant[32];

struct nod {
	int aparitii, nrfii;
	nod *fiu[ 26 ];
	nod()
	{
		aparitii=0;
        nrfii=0;
        for(int i=0;i<=26;i++)
         fiu[i]=0;
    }
}*T = new nod;

void insert(nod *p,char *s)
{
	if(*s=='\n')
    {
		p->aparitii++;
        return;
	}

	if(p->fiu[caracter]==0)
    {
		p->fiu[caracter]=new nod;
		p->nrfii ++;
	}

	insert(p->fiu[caracter],s+1);
}

int sterg(nod *p,char *s)
{
	if(*s =='\n')
		p->aparitii--;
	else if(sterg(p->fiu[caracter],s+1))
	{
			p->fiu[caracter]=0;
			p->nrfii --;
    }

	if(p->aparitii==0&&p->nrfii==0&&p!=T)
    {
		delete p;
        return 1;
	}
	return 0;
}

int apare(nod *p,char *s)
{
	if(*s=='\n')
		return p->aparitii;

	if(p->fiu[caracter])
		return apare(p->fiu[caracter],s+1);
	return 0;
}

int pref(nod *p,char *s,int k)
{
	if(*s=='\n'||p->fiu[caracter]==0)
		return k;
	return pref(p->fiu[caracter],s+1,k+1);
}

int main()
{
	int cod;
	while(f>>cod)
	{
	    f>>cuvant;
	    if(cod==0) insert(T,cuvant+2);
	    if(cod==1) sterg(T,cuvant+2);
	    if(cod==2) g<<apare(T,cuvant+2)<<"\n";
	    if(cod==3) g<<pref(T,cuvant+2,0)<<"\n";
	}
	return 0;
}