Cod sursa(job #1143147)

Utilizator vladrochianVlad Rochian vladrochian Data 14 martie 2014 20:33:48
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <cstring>
#define l *lit-'a'
using namespace std;
class trie
{
	public:
	int nc,nf;
	trie *f[26];
	trie()
	{
		nc=nf=0;
		memset(f,0,sizeof f);
	}
	void ins(char *lit)
	{
		if(*lit)
		{
			if(!f[l])
			{
				++nf;
				f[l]=new trie;
			}
			f[l]->ins(lit+1);
		}
		else
			++nc;
	}
	bool del(char *lit)
	{
		if(!*lit)
			--nc;
		else if(f[l]->del(lit+1))
		{
			delete f[l];
			f[l]=0;
			--nf;
		}
		if(nc||nf)
			return 0;
		return 1;
	}
	int nap(char *lit)
	{
		if(*lit)
		{
			if(f[l])
				return f[l]->nap(lit+1);
			return 0;
		}
		return nc;
	}
	int pref(char *lit,int sz)
	{
		if(!*lit)
			return sz;
		if(f[l])
			return f[l]->pref(lit+1,sz+1);
		return sz;
	}
}t;
ifstream fin("trie.in");
ofstream fout("trie.out");
int main()
{
	int op;
	char cuv[21];
	while(fin>>op>>cuv)
		switch(op)
		{
			case 0:
			t.ins(cuv);
			break;
			case 1:
			t.del(cuv);
			break;
			case 2:
			fout<<t.nap(cuv)<<"\n";
			break;
			case 3:
			fout<<t.pref(cuv,0)<<"\n";
			break;
		}
	return 0;
}