Pagini recente » Cod sursa (job #1550463) | Cod sursa (job #453748) | Infoarena Monthly 2014, Clasament Runda 9 | Cod sursa (job #2532228) | Cod sursa (job #3138872)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
struct Nod
{
int val_rep, val;
Nod *urm[30];
Nod()
{
val = 0;
val_rep = 0;
for(int i = 0; i <= 29; i++)
urm[i] = NULL;
}
}*start;
int x;
char sir[30];
Nod *poz;
int main()
{
start = new Nod;
while(cin >> x >> sir)
{
if(x == 0)
{
poz = start;
int q = strlen(sir);
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->val_rep++;
poz = poz->urm[poz_lit];
}
poz->val++;
}
else if(x == 1)
{
poz = start;
int q = strlen(sir);
for(int i = 0; i < q; i++)
{
int poz_lit = sir[i] - 'a';
poz->val_rep--;
poz = poz->urm[poz_lit];
}
poz->val--;
}
else if(x == 2)
{
poz = start;
int q = strlen(sir);
for(int i = 0; i < q; i++)
{
int poz_lit = sir[i] - 'a';
poz = poz->urm[poz_lit];
}
if(poz->val > 0)
cout << poz->val<<'\n';
else
cout << '0'<<'\n';
}
else if(x == 3)
{
poz = start;
int cnt = 0;
int q = strlen(sir);
int ok = 1;
for(int i = 0; i < q&&ok; i++)
{
int poz_lit = sir[i] - 'a';
if(poz->val_rep > 1)
poz = poz->urm[poz_lit], cnt++;
else
ok = 0;
}
cout << cnt << '\n';
}
}
return 0;
}