Pagini recente » Cod sursa (job #1511842) | Cod sursa (job #320965) | Cod sursa (job #620739) | Cod sursa (job #2117632) | Cod sursa (job #3005004)
#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 Add(string s)
{
int i, j;
Nod *p, * q;
p = rad;
for (i = 0; s[i]; i++)
{
j = s[i] - 'a';
if (p->leg[j] != NULL)
{
p = p->leg[j];
p->nrcuv++;
}
else
{
q = new Nod(0, 1);
p->leg[j] = q;
p = q;
}
}
p->fr++;
}
void Delete(string s)
{
int i, j;
Nod* p = rad;
for (i = 0; s[i]; i++)
{
j = s[i] - 'a';
p = p->leg[j];
p->nrcuv--;
}
p->fr--;
}
int NrAp(string s)
{
int i, j;
Nod* p = rad;
for (i = 0; s[i]; i++)
{
j = s[i] - 'a';
if (p->leg[j] == NULL) return 0;
p = p->leg[j];
}
return p->fr;
}
int Len(string s)
{
int i, j;
Nod* p = rad;
for (i = 0; s[i]; i++)
{
j = s[i] - 'a';
if (p->leg[j] == NULL) return i;
p = p->leg[j];
if (p->nrcuv == 0) return i;
}
return s.size();
}
int main()
{
int op;
string s;
rad = new Nod(0, 0);
while (fin >> op >> s)
{
if (op == 0)
Add(s);
else if (op == 1)
Delete(s);
else if (op == 2)
fout << NrAp(s) << "\n";
else
fout << Len(s) << "\n";
}
return 0;
}