Pagini recente » Cod sursa (job #3191020) | Cod sursa (job #2882348) | Cod sursa (job #2389545) | Cod sursa (job #537590) | Cod sursa (job #2892258)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct Nod
{
int fr, nrcuv;
Nod *leg[26];
Nod(int _fr, int _nrcuv)
{
fr = _fr;
nrcuv = _nrcuv;
for (int i = 0; i <= 25; i++)
leg[i] == NULL;
}
};
Nod *rad;
void Op0(string x)
{
int c;
Nod *p, *q;
p = rad;
for (unsigned int i = 0; i < x.length(); i++)
{
c = x[i] - 'a';
if (p->leg[c] != NULL)
{
p = p->leg[c];
p->nrcuv++;
}
else
{
q = new Nod(0, 1);
p->leg[c] = q;
p = p->leg[c];
}
}
p->fr++;
}
void Op1(string x)
{
int c;
Nod *p;
p = rad;
for (unsigned int i = 0; i < x.length(); i++)
{
c = x[i] - 'a';
p = p->leg[c];
p->nrcuv--;
}
p->fr--;
}
int Op2(string x)
{
int c;
Nod *p;
p = rad;
for (unsigned int i = 0; i < x.length(); i++)
{
c = x[i] - 'a';
if (p->leg[c] == NULL) return 0;
p = p->leg[c];
}
return p->fr;
}
int Op3(string x)
{
int c;
int l = 0;
Nod *p;
p = rad;
for (unsigned int i = 0; i < x.length(); i++)
{
c = x[i] - 'a';
if (p->leg[c] == NULL) return l;
p = p->leg[c];
if (p->nrcuv == 0) return l;
l++;
}
return l;
}
int main()
{
int op;
string a;
rad = new Nod(0, 0);
while (fin >> op >> a)
{
if (op == 0) Op0(a);
else if (op == 1) Op1(a);
else if (op == 2) fout << Op2(a) << "\n";
else fout << Op3(a) << "\n";
}
fin.close();
fout.close();
return 0;
}