Pagini recente » Cod sursa (job #1238859) | Cod sursa (job #1078099) | Cod sursa (job #2776757) | Cod sursa (job #926650) | Cod sursa (job #1146041)
#include <cstdio>
#include <cstring>
#define litera *cuvant-'a'
using namespace std;
class Trie{
private:
int cuv,nrfii;
public:
Trie *fii[26];
Trie()
{
cuv = nrfii = 0;
memset(fii,0,sizeof(fii));
}
inline void Insert(char *cuvant){
if(!*cuvant)
{
++cuv;
return;
}
if(!fii[litera])
{
++nrfii;
fii[litera] = new Trie;
fii[litera]->Insert(cuvant+1);
}
else fii[litera]->Insert(cuvant+1);
}
inline bool Delete(char *cuvant)
{
if(!*cuvant) --cuv;
else if(*cuvant)
{
if(fii[litera]->Delete(cuvant+1))
{
delete fii[litera];
fii[litera] = 0;
--nrfii;
}
}
if(nrfii || cuv) return false;
else return true;
}
inline int nrap(char *cuvant)
{
if(*cuvant)
if(fii[litera])
return fii[litera]->nrap(cuvant+1);
else return 0;
return cuv;
}
inline int prefix(char *cuvant)
{
if(fii[litera])
return 1 + fii[litera]->prefix(cuvant+1);
return 0;
}
}T;
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
int tip;
char cuv[22];
while(scanf("%d",&tip)!= -1 && scanf("%s",cuv)!= -1)
{
if(tip == 0) {T.Insert(cuv);continue;}
if(tip == 1) {T.Delete(cuv);continue;}
if(tip == 2) {printf("%d\n",T.nrap(cuv));continue;}
if(tip == 3) {printf("%d\n",T.prefix(cuv));continue;}
}
return 0;
}