Pagini recente » Cod sursa (job #2634583) | Cod sursa (job #171143) | Cod sursa (job #2621926) | Cod sursa (job #1207224) | Cod sursa (job #1146048)
#include <cstdio>
#include <cstring>
#include <fstream>
#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(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()
{
ifstream fin("trie.in");
freopen("trie.out","w",stdout);
int tip;
char cuv[22];
while(fin >> tip >> cuv)
{
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;
}