Pagini recente » Cod sursa (job #1614825) | Cod sursa (job #571725) | Cod sursa (job #933559) | Cod sursa (job #2177090) | Cod sursa (job #1479396)
#include <fstream>
using namespace std;
struct nod {
int nr, nf;
nod *v[26];
nod (){
nr = 0;
nf = 0;
for (int i=0;i<26;i++)
v[i] = NULL;
}
};
char s[22];
nod *rad;
ifstream fin("trie.in");
ofstream fout("trie.out");
void inserare(nod *r, char *s) {
if (*s != 0) {
if (r->v[*s-'a'] == NULL) {
r->v[*s-'a'] = new nod;
r->nf++;
}
inserare(r->v[*s-'a'], s+1);
} else
r->nr++;
}
int aparitii(nod *r, char *s) {
if (r == NULL)
return 0;
else
if (*s == 0) {
return r->nr;
}
else {
return aparitii(r->v[*s-'a'], s+1);
}
}
int prefix(nod *r, char *s) {
if (r == 0) {
return -1;
}
else
if (*s == 0) {
return 0;
} else {
return 1 + prefix(r->v[*s-'a'], s+1);
}
}
int stergere(nod *&r, char *s) {
if (*s == 0){
r->nr--;
if (r!=rad && r->nr == 0 && r->nf == 0) {
delete r;
r = NULL;
return 1;
} else
return 0;
} else {
int rez = stergere(r->v[*s-'a'], s+1);
if (rez == 1) {
r->nf--;
if (r!=rad && r->nf == 0 && r->nr == 0) {
delete r;
r = NULL;
return 1;
} else
return 0;
} else
return 0;
}
}
int main(){
rad = new nod;
int t;
while (fin>>t>>s) {
if (t == 0) {
inserare(rad, s);
} else
if (t == 1) {
stergere(rad, s);
} else
if (t == 2){
fout<<aparitii(rad, s)<<"\n";
} else {
fout<<prefix(rad, s)<<"\n";
}
}
return 0;
}