Pagini recente » Cod sursa (job #720253) | Cod sursa (job #937468) | Cod sursa (job #1219145) | Cod sursa (job #2943476) | Cod sursa (job #663864)
Cod sursa(job #663864)
#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'] == 0) 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;
}