Pagini recente » Cod sursa (job #2939333) | Cod sursa (job #710500) | Cod sursa (job #3138615) | Cod sursa (job #290027) | Cod sursa (job #2633603)
#include <bits/stdc++.h>
#define CH (*s - 'a')
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
struct Trie {
int cnt, nrfii;
Trie *fiu[26];
Trie() {
cnt = nrfii = 0;
memset (fiu, 0, sizeof( fiu ));
}
};
Trie * T = new Trie;
void Insert (Trie *nod, char *s) {
if (*s == '\n') {
nod -> cnt ++;
return;
}
if (nod -> fiu[CH] == 0) {
nod -> fiu[ CH ] = new Trie;
nod -> nrfii ++;
}
Insert (nod -> fiu[CH], s + 1);
}
int Delete (Trie *nod, char *s) {
if (*s == '\n')
nod -> cnt --;
else
if (Delete ( nod -> fiu[CH], s + 1) ) {
nod -> fiu[CH] = 0;
nod -> nrfii --;
}
if (nod -> cnt == 0 && nod -> nrfii == 0 && nod != T ) {
delete nod;
return 1;
}
return 0;
}
int Count (Trie *nod, char *s) {
if (*s == '\n')
return nod -> cnt;
if (nod -> fiu[CH])
return Count (nod -> fiu[CH], s + 1);
return 0;
}
int Preffix (Trie *nod, char *s, int k) {
if (*s == '\n' || nod -> fiu[CH] == 0 )
return k;
return Preffix (nod -> fiu[CH], s + 1, k + 1);
}
int main() {
short op;
char s[24];
while (fin >> op) {
fin >> s;
s[strlen(s)] = '\n';
if (op == 0)
Insert (T, s);
if (op == 1)
Delete (T, s);
if (op == 2)
fout << Count (T, s) << '\n';
if (op == 3)
fout << Preffix (T, s, 0) << '\n';
}
return 0;
}