Pagini recente » Borderou de evaluare (job #2022802) | Cod sursa (job #2889532) | Cod sursa (job #2606309) | Borderou de evaluare (job #2657148) | Cod sursa (job #3231167)
//
// Created by LEGION on 5/25/2024.
//
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
const int NL = 26;
const int LC = 20;
struct nod {
nod* fii[NL];
int nr_cuv,nr_fii;
nod() {
nr_cuv = nr_fii= 0;
for (int i = 0; i < NL; ++i){
fii[i] = NULL;
}
}
};
nod *adaugare(nod* rad,char cuv[]) {
if (rad==NULL) {
rad = new nod;
}
if (cuv[0]=='\0') {
rad->nr_cuv++;
return rad;
}
int poz_lit = (int)(cuv[0]-'a');
if (rad->fii[poz_lit]==NULL) {
rad->nr_fii++;
}
rad->fii[poz_lit] = adaugare(rad->fii[poz_lit],cuv+1);
return rad;
}
nod *stergere(nod* rad,char cuv[]) {
if (cuv[0]=='\0') {
if (rad->nr_fii==0 && rad->nr_cuv==1) {///rad e frunza
delete rad;
rad = NULL;
}else {
rad->nr_cuv--;
}
}else {
int poz_lit = (int)cuv[0]-'a';
rad->fii[poz_lit] = stergere(rad->fii[poz_lit],cuv+1);
}
return rad;
}
int aparitii(nod *rad,char cuv[]) {
if(rad==NULL)
return 0;
if (cuv[0]=='\0') {//suntem la finalu cuvantului
return rad->nr_cuv;
}
int poz_lit = (int)cuv[0]-'a';
return aparitii(rad->fii[poz_lit],cuv+1);
}
int lung_prefix(nod*rad,char cuv[]) {
if (rad==NULL) {
return 0;
}
if (cuv[0]=='\n')
return 0;
int poz_lit = (int)cuv[0]-'a';
int lung = 0;;
if (rad->fii[poz_lit]!=NULL) {
lung = 1+lung_prefix(rad->fii[poz_lit],cuv+1);
}
return lung;
}
int main(){
char cuvant [LC+1];
int tip;
nod *radacina = new nod;
while (fin >> tip >> cuvant) {
if (tip==0)
radacina = adaugare(radacina,cuvant);
else if (tip==1)
radacina = stergere(radacina,cuvant);
else if (tip==2)
fout << aparitii(radacina,cuvant)<<'\n';
else
fout << lung_prefix(radacina,cuvant)<<'\n';
}
return 0;
}