Pagini recente » Cod sursa (job #2531908) | Cod sursa (job #271209) | Cod sursa (job #48099) | Cod sursa (job #2865908) | Cod sursa (job #2521433)
#include<fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int cerinta;
char cuvant[30];
struct trie{
int nrc;
int nrf;
trie *f[26];
trie(){
nrc=0;
nrf=0;
for(int i=0; i<26; i++){
f[i]=NULL;
}
}
}*date;
void Adaugare(trie *nod,char *sir){
if(*sir!=0){
if(nod->f[*sir-'a']==NULL){
nod->nrf++;
nod->f[*sir-'a']=new trie;
}
Adaugare(nod->f[*sir-'a'],sir+1);
}
else{
nod->nrc++;
}
}
int Stergere(trie *nod,char *sir){
if(*sir==0){
nod->nrc--;
if(nod->nrc==0 && nod->nrf==0 && nod!=date){
delete nod;
return 1;
}
return 0;
}
if(Stergere(nod->f[*sir-'a'],sir+1)){
nod->nrf--;
if(nod->nrc==0 && nod->nrf==0 && nod!=date){
delete nod;
return 1;
}
return 0;
}
return 0;
}
int Aparitie(trie *nod,char *sir){
if(*sir==0){
return nod->nrc;
}
if(nod->f[*sir-'a']==NULL){
return 0;
}
return Aparitie(nod->f[*sir-'a'],sir+1);
}
int LgPrefix(trie *nod,char *sir){
if(*sir==0){
return 0;
}
if(nod->f[*sir-'a']==NULL){
return 0;
}
return LgPrefix(nod->f[*sir-'a'],sir+1)+1;
}
int main(){
date=new trie;
while(fin>>cerinta){
fin>>cuvant;
if(cerinta==0){
Adaugare(date,cuvant);
}
if(cerinta==1){
Stergere(date,cuvant);
}
if(cerinta==2){
fout<<Aparitie(date,cuvant)<<"\n";
}
if(cerinta==3){
fout<<LgPrefix(date,cuvant)<<"\n";
}
}
return 0;
}