Pagini recente » Cod sursa (job #2218949) | Cod sursa (job #991034) | Cod sursa (job #119064) | Cod sursa (job #1151283) | Cod sursa (job #711292)
Cod sursa(job #711292)
#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;
}
if (!cuv -> fiu[s[lit] - 'a']){
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 && !cuv -> val && 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));
}
}