Pagini recente » Cod sursa (job #1660567) | Cod sursa (job #3765) | Cod sursa (job #2551142) | Cod sursa (job #1308109) | Cod sursa (job #2890001)
#include <bits/stdc++.h>
using namespace std;
struct Nod
{
int fr, nrcuv;
Nod *leg[26];
Nod(int _fr, int _nr)
{
fr = _fr; nrcuv = _nr;
for (int i = 0; i < 26; i++)
leg[i] = NULL;
}
};
Nod *rad;
void Op0(string w)
{
int j;
Nod *p, *q;
p = rad;
for (unsigned int i = 0; i < w.length(); i++)
{
j = w[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 Op1(string w)
{
int j;
Nod *p;
p = rad;
for (unsigned int i = 0; i < w.length(); i++)
{
j = w[i] - 'a';
p = p->leg[j];
p->nrcuv--;
}
p->fr--;
}
int Op2(string w)
{
int j;
Nod *p = rad;
for (unsigned int i = 0; i < w.length(); i++)
{
j = w[i] - 'a';
if (p->leg[j] == NULL) return 0;
p = p->leg[j];
}
return p->fr;
}
int Op3(string w)
{
int j, maxLen = 0;
Nod *p = rad;
for (unsigned int i = 0; i < w.length(); i++)
{
j = w[i] - 'a';
if (p->leg[j] == NULL) return maxLen;
p = p->leg[j];
if (p->nrcuv == 0) return maxLen;
maxLen++;
}
return maxLen;
}
ifstream fin("trie.in");
ofstream fout("trie.out");
int main()
{
int op;
string w;
rad = new Nod(0,0);
while (fin >> op >> w)
{
if (op == 0) Op0(w);
else if (op == 1) Op1(w);
else if (op == 2) fout << Op2(w) << "\n";
else fout << Op3(w) << "\n";
}
fout.close();
return 0;
}