Pagini recente » Cod sursa (job #2215515) | Cod sursa (job #1311601) | Cod sursa (job #2523774) | Cod sursa (job #817763) | Cod sursa (job #1479811)
#include<fstream>
using namespace std;
int t;
char s[25];
struct nod{
int nr;
int nf;
nod *v[26];
nod(){
nr = nf = 0;
for(int i = 0; i < 26; i++){
v[i] = NULL;
}
}
};
nod *p;
ifstream fin("trie.in");
ofstream fout("trie.out");
void adauga(char *s, nod *r){
if(*s == 0){
r->nr++;
}
else{
if(r->v[*s - 'a'] == NULL){
r->v[*s - 'a'] = new nod;
r->nf++;
}
adauga(s + 1, r->v[*s - 'a']);
}
}
int aparitii(char *s, nod *r){
if(r == NULL){
return 0;
}
else{
if(*s == 0){
return r->nr;
}
else{
return aparitii(s + 1, r->v[*s - 'a']);
}
}
}
int prefixe(char *s, nod *r){
if(r == NULL){
return -1;
}
else{
if(*s == 0){
return 0;
}
else{
return 1 + prefixe(s + 1, r->v[*s - 'a']);
}
}
}
int stergere(char *s, nod *&r){
if(*s == 0){
r->nr--;
if(r != p && r->nr == 0 && r->nf == 0){
delete r;
r = NULL;
return 1;
}
else{
return 0;
}
}
else{
int re = stergere(s + 1, r->v[*s - 'a']);
if(re == 1){
r->nf--;
if(r != p && r->nr == 0 && r->nf == 0){
delete r;
r = NULL;
return 1;
}
else{
return 0;
}
}
else{
return 0;
}
}
}
int main(){
p = new nod;
while(fin>> t >> s){
if(t == 0){
adauga(s, p);
}
else{
if(t == 1){
stergere(s, p);
}
else{
if(t == 2){
fout<< aparitii(s, p) <<"\n";
}
else{
fout<< prefixe(s, p) <<"\n";
}
}
}
}
return 0;
}