Pagini recente » Cod sursa (job #1329964) | Cod sursa (job #2943956) | Cod sursa (job #654906) | Cod sursa (job #1663849) | Cod sursa (job #2553585)
#include <fstream>
#include <vector>
#include <string.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct node
{
int info;
node *copii[28];
int lung;
node()
{
info = 0;
memset(copii, 0, sizeof(copii));
}
} *r;
void adauga(node *&n, char *c)
{
if(c[0] == '\0')
{
n->info++;
return;
}
if(n->copii[c[0] - 'a'] == nullptr)
{
n->copii[c[0] - 'a'] = new node();
n->lung++;
}
adauga(n->copii[c[0] - 'a'], c+1);
}
int delCuv(node *&n, char *c)
{
if(c[0] == '\0')
{
n->info--;
if(n->info == 0 && n->lung == 0)
{
delete n;
return 1;
}
return 0;
}
if(delCuv(n->copii[c[0] - 'a'], c+1) == 1)
{
n->copii[c[0] - 'a'] = 0;
n->lung--;
if(n->lung == 0 && n->info == 0 && n != r)
{
delete n;
return 1;
}
}
return 0;
}
int apar(node *&n, char *c)
{
if(c[0] == '\0')
{
return n->info;
}
if(n->copii[c[0] - 'a'] == nullptr)
{
return 0;
}
return apar(n->copii[c[0] - 'a'], c+1);
}
int prefix(node *&n, char *c, int niv)
{
if(c[0] == '\0')
{
return niv;
}
if(n->copii[c[0] - 'a'] == nullptr)
{
return niv;
}
return prefix(n->copii[c[0] - 'a'], c+1, niv+1);
}
void solve()
{
r = new node();
int command;
char word[23];
while(!f.eof())
{
f>>command>>word;
if(f.eof())
return;
if(command == 0)
adauga(r, word);
else if(command == 1)
delCuv(r, word);
else if(command == 2)
g<<apar(r, word)<<"\n";
else
g<<prefix(r, word, 0)<<"\n";
}
}
int main()
{
solve();
return 0;
}