Pagini recente » Cod sursa (job #2688698) | Cod sursa (job #1964476) | Cod sursa (job #1806773) | Cod sursa (job #1479354) | Cod sursa (job #1894636)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie
{
int nr_fii = 0;
int nr_cuv = 0;
trie *fiu[26] = {0};
} *T;
void add(trie *nod, char cuv[])
{
if(cuv[0] == NULL)
{
nod->nr_cuv++;
return;
}
if(nod->fiu[cuv[0] - 'a'] == NULL)
{
nod->fiu[cuv[0] - 'a'] = new trie;
nod->nr_fii++;
}
add(nod->fiu[cuv[0] - 'a'], cuv + 1);
}
void sterge(trie *nod, char cuv[])
{
if(cuv[0] == NULL)
{
nod->nr_cuv--;
}
else
{
sterge(nod->fiu[cuv[0] - 'a'], cuv + 1);
if(nod->fiu[cuv[0] - 'a']->nr_fii == 0 && nod->fiu[cuv[0] - 'a']->nr_cuv == 0)
{
nod->nr_fii--;
delete nod->fiu[cuv[0] - 'a'];
nod->fiu[cuv[0] - 'a'] = NULL;
}
}
}
int cate(trie *nod, char cuv[])
{
if(cuv[0] == NULL)
return nod->nr_cuv;
if(nod->fiu[cuv[0] - 'a'] == NULL)
return 0;
return cate(nod->fiu[cuv[0] - 'a'], cuv + 1);
}
int prefix(trie *nod, char cuv[])
{
if(cuv[0] == NULL)
return 0;
if(nod->fiu[cuv[0] - 'a'] == NULL)
return 0;
return prefix(nod->fiu[cuv[0] - 'a'], cuv + 1) + 1;
}
int main()
{
int q;
char cuvant[25];
T = new trie;
while(fin >> q)
{
fin >> cuvant;
if(q == 0)
add(T, cuvant);
if(q == 1)
sterge(T, cuvant);
if(q == 2)
fout << cate(T, cuvant) << '\n';
if(q == 3)
fout << prefix(T, cuvant) << '\n';
}
return 0;
}