Pagini recente » Cod sursa (job #2049596) | Cod sursa (job #229948) | Cod sursa (job #1172369) | Cod sursa (job #652766) | Cod sursa (job #2282913)
//
// Trie.cpp
//
//
// Created by Raoul Bocancea on 14/11/2018.
//
#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;
}