Pagini recente » Cod sursa (job #2600363) | Cod sursa (job #1128856) | Cod sursa (job #1886970) | Cod sursa (job #2443144) | Cod sursa (job #1215530)
#include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie {
int nr;
int fii;
trie *f[26];
trie() {
nr = fii = 0;
for (int i=0;i<26;i++)
f[i] = 0;
}
};
trie *r = new trie();
void insertTrie(trie *nod, char *p) {
if (*p == 0) {
nod->nr++;
return;
}
if (nod->f[*p-'a'] == 0) {
nod->f[*p-'a'] = new trie;
nod->fii ++;
}
insertTrie(nod->f[*p-'a'], p+1);
}
int deleteTrie(trie *&nod, char *p) {
if (*p == 0) {
nod->nr--;
if (nod->fii == 0 && nod->nr == 0 && r!=nod) {
delete nod;
nod = 0;
return 1;
}
return 0;
}
if (deleteTrie(nod->f[*p-'a'], p+1)) {
nod->fii--;
if (nod->fii == 0 && nod->nr == 0 && nod != r) {
delete nod;
nod = 0;
return 1;
}
}
return 0;
}
int nrTrie(trie *nod, char *p) {
if (*p == 0) {
return nod->nr;
}
if (nod->f[*p-'a'] == 0)
return 0;
return nrTrie(nod->f[*p-'a'], p+1);
}
int prefixTrie(trie *nod, char *p) {
if (*p == 0) {
return 0;
}
if (nod->f[*p-'a'] == 0)
return 0;
return 1+prefixTrie(nod->f[*p-'a'], p+1);
}
char s[25];
int t;
int main() {
while (fin>>t>>s) {
if (t == 0) {
// introduc s in trie
insertTrie(r, s);
} else
if (t == 1) {
deleteTrie(r, s);
} else
if (t == 2) {
fout<<nrTrie(r, s)<<"\n";
} else
fout<<prefixTrie(r, s)<<"\n";
}
return 0;
}