Pagini recente » Cod sursa (job #2876095) | Cod sursa (job #2733564) | Cod sursa (job #530816) | Cod sursa (job #2283497) | Cod sursa (job #2846621)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
const int dim=1e5+9;
struct Trie{
int cnt,nrfii;
Trie *fiu[30];
Trie(){
cnt=nrfii=0;
for(int i=0;i<=26;i++){
fiu[i]=0;
}
}
};
Trie *root=new Trie;
void Insert(Trie *nod,char *s){
char ch=*s;
if(ch<'a'||ch>'z'){
nod->cnt++;
return;
}
else{
ch-='a';
if(nod->fiu[ch]==0){
nod->fiu[ch]=new Trie;
nod->nrfii++;
}
Insert(nod->fiu[ch],s+1);
}
}
bool Delete(Trie *nod,char *s){
char ch=*s;
if(ch<'a'||ch>'z'){
nod->cnt--;
}
else{
ch-='a';
if(Delete(nod->fiu[ch],s+1)){//daca am sters fiul ch
nod->fiu[ch]=0;
nod->nrfii--;
}
}
if(nod->cnt==0&&nod->nrfii==0 && nod!=root){
delete nod;
return 1;
}
return 0;
}
int Query2(Trie *nod,char *s){
int ch=*s;
if(ch<'a'||ch>'z'){
return nod->cnt;
}
ch-='a';
if(nod->fiu[ch]){
return Query2(nod->fiu[ch],s+1);
}
return 0;
}
int Query3(Trie *nod,char *s,int k){
char ch=*s;
if((ch<'a'||ch>'z')||nod->fiu[ch-'a']==0){
return k;
}
ch-='a';
return Query3(nod->fiu[ch],s+1,k+1);
}
signed main(){
int op;
while(fin>>op){
char s[50];
fin>>s;
if(op==0){
Insert(root,s);
}
if(op==1){
Delete(root,s);
}
if(op==2){
fout<<Query2(root,s)<<'\n';
}
if(op==3){
fout<<Query3(root,s,0)<<'\n';
}
}
}