Pagini recente » Cod sursa (job #2134502) | Cod sursa (job #1759182) | Cod sursa (job #1893248) | Cod sursa (job #2924014) | Cod sursa (job #2405258)
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
using namespace std;
char x[25];
struct arb{
int trec,gata;
arb *next[26];
arb()
{
trec=gata=0;
memset(next,0,sizeof(next));
}
};
void insert(char *c,arb *nod)
{
++nod->trec;
if(*c==NULL)
{
++nod->gata;
return;
}
if(nod->next[ (*c)-'a' ] == NULL )
{
arb *fiu=new arb;
nod->next[ (*c)-'a' ] = fiu;
}
insert(c+1,nod->next[ (*c)-'a' ]);
}
void del(char *c,arb *nod)
{
--nod->trec;
if(*c==NULL)
{
--nod->gata;
return;
}
del(c+1,nod->next[(*c)-'a']);
}
int find_ap(char *c,arb *nod)
{
if((*c)==NULL)
return nod->gata;
if( nod->next[ (*c)-'a'] == NULL )
return 0;
return find_ap(c+1,nod->next[ (*c)-'a']);
}
int find_max(char *c,arb *nod,int deep)
{
if((*c)==NULL || nod->next[ (*c)-'a'] == NULL || nod->next[ (*c)-'a']->trec ==0)
return deep;
return find_max(c+1,nod->next[ (*c)-'a'],deep+1);
}
int main()
{
arb *inc=new arb;
ifstream f("trie.in");
ofstream g("trie.out");
int op;
while(f>>op>x)
{
f.get();
if(!op)
insert(x,inc);
if(op==1)
del(x,inc);
if(op==2)
g<<find_ap(x,inc)<<"\n";
if(op==3)
g<<find_max(x,inc,0);
}
return 0;
}