Pagini recente » Cod sursa (job #1551498) | Cod sursa (job #1951569)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct nod
{
int v, n;
nod* nxt[26];
nod()
{
v=n=0;
memset(nxt, 0, sizeof(nxt));
}
};
nod *r=new nod;
void ins(nod* x, char* s)
{
int c=*s-'a';
if(*s==0)
{
x->v++;
return;
}
if(x->nxt[c]==0)
x->nxt[c]=new nod, x->n++;
ins(x->nxt[c], s+1);
}
bool del(nod* x, char* s)
{
int c=*s-'a';
if(*s==0)
x->v--;
else if(del(x->nxt[c], s+1))
x->nxt[c]=0, x->n--;
if(x->v==0&&x->n==0&&x!=r)
{
delete x;
return true;
}
return 0;
}
int query(nod* x, char* s)
{
int c=*s-'a';
if(*s==0)
return x->v;
if(x->nxt[c])
return query(x->nxt[c], s+1);
return 0;
}
int len(nod* x, char* s, int l)
{
int c=*s-'a';
if(*s==0||x->nxt[c]==0)
return l;
return len(x->nxt[c], s+1, l+1);
}
int main()
{
int op; char cuv[25];
while(fin>>op>>cuv)
{
if(op==0)
ins(r, cuv);
else if(op==1)
del(r, cuv);
else if(op==2)
fout<<query(r, cuv)<<'\n';
else if(op==3)
fout<<len(r, cuv, 0)<<'\n';
}
return 0;
}