Pagini recente » Cod sursa (job #2481188) | Cod sursa (job #1084074) | Cod sursa (job #2028825) | Cod sursa (job #2909879) | Cod sursa (job #2521996)
#include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int n, i = 0;
char s[26], op;
struct nod{
int NrFii;
int NrCuvinte;
int NrPrefixe;
nod *Fiu[26];
nod(){
NrFii = 0;
NrCuvinte = 0;
NrPrefixe = 0;
for(int i = 0;i<26;i++)
Fiu[i] = 0;
}
};
nod *rad = new nod;
void adaugare(char *s, nod *p){
///daca mai am vreun caracter din cuvant de adaugat in lista
if(*s != 0){
int litera = *s - 'a';
if(p->Fiu[litera] == NULL){
p->Fiu[litera] = new nod;
p->NrFii++;
}
p->Fiu[litera]->NrPrefixe++;
adaugare(s+1, p->Fiu[litera]);
}
else
p->NrCuvinte++;
}
void sterge(char *s, nod *p){
/*int litera = *s-'a';
if(*(s+1) != 0)
sterge(s+1, p->Fiu[litera]);
p->Fiu[litera]->NrPrefixe--;
if(*(s+1) == 0)
p->Fiu[litera]->NrCuvinte--;
if(p->Fiu[litera]->NrPrefixe == 0){
delete p;
return;
}*/
p->NrPrefixe--;
if(*s == 0){
p->NrCuvinte--;
}
else{
int litera = *s-'a';
sterge(s+1, p->Fiu[litera]);
if(p->Fiu[litera]->NrPrefixe == 0)
p->Fiu[litera] = NULL;
}
}
int aparitii(char *s, nod *p){
if(*s != 0){
int litera = *s - 'a';
if(p->Fiu[litera] == NULL)
return 0;
return aparitii(s+1, p->Fiu[litera]);
}
return p->NrCuvinte;
}
int prefix(char *s, nod *p, int nr){
int litera = *s - 'a';
if(litera < 0 || p->Fiu[litera] == NULL)
return nr;
return prefix(s+1, p->Fiu[litera], nr+1);
}
int main(){
while(fin>>op){
fin>>s;
if(op == '0')
adaugare(s, rad);
if(op == '1')
sterge(s, rad);
if(op == '2')
fout<<aparitii(s, rad)<<"\n";
if(op == '3')
fout<<prefix(s, rad, 0)<<"\n";
}
return 0;
}