Pagini recente » Cod sursa (job #58039) | Cod sursa (job #1579877) | Cod sursa (job #1743757) | Cod sursa (job #2412959) | Cod sursa (job #1922771)
#include<fstream>
#define NMAX 21
using namespace std;
struct trie
{
int na;
int nf;
trie *fiu[26];
trie()
{
na = nf = 0;
for(int i = 0; i < 26; i++)
{
fiu[i] = 0;
}
}
};
trie *rad;
int cerinta;
char _char[NMAX];
ifstream _cin("trie.in");
ofstream _cout("trie.out");
void _insert(trie *nod, char *_char)
{
if(*_char == 0)
{
nod -> na++;
return;
}
if(nod -> fiu[*_char - 'a'] == NULL)
{
nod -> fiu[*_char - 'a'] = new trie;
nod -> nf++;
}
_insert(nod -> fiu[*_char - 'a'], _char + 1);
}
int aparitii(trie *nod, char *_char)
{
if(*_char == 0)
{
return nod -> na;
}
if(nod -> fiu[*_char - 'a'] == NULL)
{
return 0;
}
return aparitii(nod -> fiu[*_char - 'a'], _char + 1);
}
int prefix(trie *nod, char *_char)
{
if(*_char == 0)
{
return 0;
}
if(nod -> fiu[*_char - 'a'] == NULL)
{
return 0;
}
return 1 + prefix(nod -> fiu[*_char - 'a'], _char + 1);
}
bool sterge(trie *nod, char *_char)
{
if(*_char == 0)
{
nod -> na--;
if(nod -> na == 0 && nod -> nf == 0 && nod != rad)
{
delete nod;
return 1;
}
}
if(nod -> fiu[*_char - 'a'] == NULL)
{
return 0;
}
if(!sterge(nod -> fiu[*_char - 'a'], _char + 1))
{
return 0;
}
nod -> fiu[*_char - 'a'] = NULL;
nod -> nf--;
if(nod -> na == 0 && nod -> nf == 0 && nod != rad)
{
delete nod;
return 1;
}
return 0;
}
int main()
{
rad = new trie;
while(_cin >> cerinta)
{
_cin >> _char;
if(cerinta == 0)
{
_insert(rad, _char);
continue;
}
if(cerinta == 1)
{
sterge(rad, _char);
continue;
}
if(cerinta == 2)
{
_cout << aparitii(rad, _char) << "\n";
continue;
}
_cout << prefix(rad, _char) << "\n";
}
return 0;
}