Cod sursa(job #2602640)

Utilizator T_george_TGeorge Teodorescu T_george_T Data 17 aprilie 2020 15:42:03
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
int tip;
char c[21];
#define val (*c-'a')
struct trie{
    int nrFii,cnt;
    trie *fiu[26];
    trie(){
        cnt=nrFii=0;
        memset(fiu,0,sizeof(fiu));
    }
};
trie *t=new trie;
void ins(trie *nod,char *c){
    if(*c==0){
        nod->cnt++;
        return;
    }
    if(nod->fiu[val]==0){
        nod->fiu[val]=new trie;
        nod->nrFii++;
    }
    ins(nod->fiu[val],c+1);
}
int del(trie *nod,char *c){
    if(*c==0)
        nod->cnt--;
    else if(del(nod->fiu[val],c+1)){
        nod->fiu[val]=0;
        nod->nrFii--;
    }
    if(nod->cnt==0 && nod->nrFii==0 && nod!=t){
        delete nod;
        return 1;
    }
    return 0;
}
int ans1(trie *nod,char *c){
    if(*c==0)
        return nod->cnt;
    if(nod->fiu[val])
        return ans1(nod->fiu[val],c+1);
    return 0;
}
int ans2(trie *nod,char *c,int k){
    if(*c==0 || nod->fiu[val]==0)
        return k;
    return ans2(nod->fiu[val],c+1,k+1);
}
int main()
{
    while(in>>tip>>c)
     switch(tip){
         case 0:ins(t,c);break;
         case 1:del(t,c);break;
         case 2:out<<ans1(t,c)<<'\n';break;
         case 3:out<<ans2(t,c,0)<<'\n';break;
     }

    return 0;
}