Pagini recente » Cod sursa (job #2576304) | Cod sursa (job #510557) | Cod sursa (job #1555124) | Cod sursa (job #2448358) | Cod sursa (job #3139048)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
struct Nod
{
int val_rep, val;
Nod *urm[40];
Nod()
{
val = 0;
val_rep = 0;
for(int i = 0; i <= 36; i++)
urm[i] = NULL;
}
}*start;
int x, q;
char sir[40];
Nod *poz;
void adauga()
{
for(int i = 0; i < q; i++)
{
int poz_lit = sir[i] - 'a';
if(poz->urm[poz_lit] == NULL)
poz->urm[poz_lit] = new Nod;
poz = poz->urm[poz_lit];
poz->val_rep++;
}
poz->val++;
}
void sterge()
{
for(int i = 0; i < q; i++)
{
int poz_lit = sir[i] - 'a';
poz = poz->urm[poz_lit];
poz->val_rep--;
}
poz->val--;
}
void print_aparitii()
{
int ok = 1;
for(int i = 0; i < q && ok; i++)
{
int poz_lit = sir[i] - 'a';
if(poz->urm[poz_lit] == NULL)
ok = 0;
else
poz = poz->urm[poz_lit];
}
if(ok == 1 && poz->val > 0)
cout << poz->val<<'\n';
else
cout << '0'<<'\n';
}
void print_prefix_comun()
{
int cnt = 0;
int ok = 1;
for(int i = 0; i < q&&ok; i++)
{
int poz_lit = sir[i] - 'a';
if(poz->urm[poz_lit] == NULL || poz->urm[poz_lit]->val_rep < 1)
ok = 0;
else
poz = poz->urm[poz_lit], cnt++;
}
cout << cnt << '\n';
}
int main()
{
start = new Nod;
start->val_rep = 100000000;
while(cin >> x >> sir)
{
q = strlen(sir);
poz = start;
if(x == 0)
{
adauga();
continue;
}
if(x == 1)
{
sterge();
continue;
}
if(x == 2)
{
print_aparitii();
continue;
}
if(x == 3)
{
print_prefix_comun();
continue;
}
}
return 0;
}