Pagini recente » Cod sursa (job #781398) | Cod sursa (job #1743232) | Cod sursa (job #1118232) | Cod sursa (job #93083) | Cod sursa (job #711283)
Cod sursa(job #711283)
#include<cstdio>
#include<cstring>
using namespace std;
char s[21];
struct word {
int val, fii;
word *fiu[26];
word(){
val = fii = 0;
memset(fiu, 0, sizeof(fiu));
}
} *W = new word;
void Insert(word *cuv, int lit) {
if (!s[lit]) {
cuv -> val ++; return;
}
else{
if (cuv -> fiu[s[lit] - 'a'] == 0){
cuv -> fiu[s[lit] - 'a'] = new word;
cuv -> fii ++;
}
Insert(cuv -> fiu[s[lit] - 'a'], lit + 1);
}
}
int Delete(word *cuv, int lit) {
if (!s[lit]) cuv -> val--;
else if (Delete(cuv -> fiu[s[lit] - 'a'], lit + 1)){
cuv -> fii--;
cuv -> fiu [s[lit] - 'a'] = 0;
}
if (cuv -> fii == 0 && cuv -> val == 0 && cuv != W){
delete cuv; return 1;
}
return 0;
}
int Print(word *cuv, int lit) {
if (!s[lit]) return cuv -> val;
else if (cuv -> fiu[s[lit] - 'a'])
return Print(cuv -> fiu[s[lit] - 'a'], lit + 1);
return 0;
}
int Prefix(word *cuv, int lit) {
if (!s[lit] || !cuv -> fiu[s[lit] - 'a']) return lit;
else return Prefix(cuv -> fiu[s[lit] - 'a'], lit + 1);
}
int main() {
int tip;
freopen("trie.in", "r", stdin), freopen("trie.out", "w", stdout);
while(scanf("%d %s", &tip, s) != EOF) {
if(tip == 0) Insert(W, 0);
if(tip == 1) Delete(W, 0);
if(tip == 2) printf("%d\n", Print(W, 0));
if(tip == 3) printf("%d\n", Prefix(W, 0));
}
return 0;
}