Pagini recente » Cod sursa (job #2514537) | Cod sursa (job #1616287) | Cod sursa (job #2337266) | Cod sursa (job #709510) | Cod sursa (job #2374319)
#include <iostream>
#include <fstream>
#define CH (*s - 'a')
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
struct Trie {
int pr;
Trie *fii[26];
};
char s[40];
Trie *t = new Trie;
void adaug(Trie *p, char *s) {
p->pr++;
if(*s != '\0') {
if(p->fii[CH] == NULL)
p->fii[CH] = new Trie();
adaug(p->fii[CH], s + 1);
}
}
void del(Trie *p, char *s) {
p->pr--;
if(*s != '\0')
del(p->fii[CH], s + 1);
}
int appars(Trie *p, char *s) {
if(*s != '\0') {
if(p->fii[CH] == NULL)
return 0;
else
return appars(p->fii[CH], s + 1);
} else {
int res = p->pr;
for(int i = 0; i < 26; i++)
if(p->fii[i] != NULL)
res -= p->fii[i]->pr;
return res;
}
}
int prefix(Trie *p, char *s, int cnt = 0) {
if(*s == '\0') {
return cnt;
} else {
if(p->fii[CH] != NULL && p->fii[CH]->pr > 0)
return prefix(p->fii[CH], s + 1, cnt + 1);
else
return cnt;
}
}
int main()
{
while(in.getline(s, 40)) {
if(s[0] == '0')
adaug(t, s + 2);
else if(s[0] == '1')
del(t, s + 2);
else if(s[0] == '2')
out << appars(t, s + 2) << '\n';
else if(s[0] == '3')
out << prefix(t, s + 2) << '\n';
}
in.close();
out.close();
return 0;
}