Pagini recente » Cod sursa (job #238843) | Cod sursa (job #103068) | Cod sursa (job #532836) | Cod sursa (job #92844) | Cod sursa (job #1210218)
#include <cstdio>
#include <cstring>
#include <iostream>
#define ch (*c - 'a')
using namespace std;
struct trie
{
int nr,n;
trie *p[26];
trie()
{
nr=n=0;
memset(p , 0 , sizeof(p));
}
};
trie *t = new trie;
void adauga(trie *nod,char *c)
{
if (*c == '\n')
{
++nod->n;return;
}
if (nod->p[ch] == 0)
{
nod->p[ch] = new trie;
++nod->nr;
}
adauga(nod->p[ch],c+1);
}
int sterge(trie *nod,char *c)
{
if (*c == '\n')
--nod->n;
else
if (sterge(nod->p[ch],c+1))
{
nod->p[ch]=0;
nod->nr--;
}
if (nod->n == 0 && nod->nr == 0 && nod != t)
{
delete nod;
return 1;
}
return 0;
}
int a3(trie *nod,char *c)
{
if (*c == '\n')
return nod->n;
if (nod->p[ch])
return a3(nod->p[ch],c+1);
return 0;
}
int a4(trie *nod,char *c,int k)
{
if (*c == '\n' && nod->p[ch] == 0)
return k;
return (nod->p[ch],c+1,k+1);
}
int main()
{
char line[32];
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
fgets(line,32,stdin);
while (!feof(stdin))
{
if (line[0] == '0')
adauga(t,line+2);
else
if (line[0] == '1')
sterge(t,line+2);
else
if (line[0] == '2')
printf("%d\n",a3(t,line+2));
else
printf("%d\n",a4(t,line+2,0));
fgets(line,32,stdin);
}
return 0;
}