Pagini recente » Cod sursa (job #406895) | Cod sursa (job #1932808) | Cod sursa (job #3261713) | Cod sursa (job #2945062) | Cod sursa (job #3004947)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct nod {
int ap_cuv = 0, ap_pre = 0;
nod *copii[26];
} *rad;
char cuv[25];
int nrl;
void adaugare(nod *&rad, int poz) {
if (!rad)
rad = new nod;
rad->ap_pre++;
if (poz == nrl)
rad->ap_cuv++;
else
adaugare(rad->copii[cuv[poz] - 'a'], poz + 1);
}
void eliminare(nod *&rad, int poz) {
rad->ap_pre--;
if (poz == nrl)
rad->ap_cuv--;
else
eliminare(rad->copii[cuv[poz] - 'a'], poz + 1);
}
int aparitii(nod *&rad, int poz) {
if (!rad)
return 0;
if (poz == nrl)
return rad->ap_cuv;
return aparitii(rad->copii[cuv[poz] - 'a'], poz + 1);
}
int prefix(nod *&rad, int poz) {
if (!rad || !rad->ap_pre)
return poz - 1;
if (poz == nrl)
return nrl;
return prefix(rad->copii[cuv[poz] - 'a'], poz + 1);
}
int main() {
int tip;
while (f >> tip >> cuv) {
nrl = strlen(cuv);
switch (tip) {
case 0:
adaugare(rad, 0);
break;
case 1:
eliminare(rad, 0);
break;
case 2:
g << aparitii(rad, 0) << '\n';
break;
case 3:
g << prefix(rad, 0) << '\n';
break;
}
}
return 0;
}