Pagini recente » Cod sursa (job #3189432) | Cod sursa (job #370784) | Cod sursa (job #703536) | Cod sursa (job #2801567) | Cod sursa (job #1802418)
#include <fstream>
# define DIM 100010
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie {
int inf;
int fii;
trie *next[26];
trie() {
fii = 0;
inf=0;
for (int i=0;i<26;i++)
next[i] = 0;
}
};
trie *sursa;
int op,nr;
char s[DIM];
void inserare(trie *r, char *s) {
if (*s == 0) {
//notez in r->inf informatia despre sirul meu
r->inf ++;
} else {
if (r->next[*s - 'a'] == NULL) {
r->next[*s - 'a'] = new trie();
r->fii ++;
}
inserare(r->next[*s - 'a'], s+1);
}
}
int stergere(trie *&r,char *s){
if(*s==0){
r->inf--;
if(r->inf==0&&r->fii==0&&r!=sursa){
delete r;
r=0;
return 1;
}
return 0;
}
if(stergere(r->next[*s-'a'],s+1)){
r->fii--;
if(r->fii==0&&r->inf==0&&r!=sursa){
delete r;
r=0;
r--;
}
}
return 0;
}
int aparitii(trie *r,char *s){
if(*s==0)
return r->inf;
if(r->next[*s-'a']==NULL)
return 0;
return aparitii(r->next[*s-'a'],s+1);
}
int prefix(trie *r,char *s){
nr++;
if (*s == 0) {
return nr-1;
} else {
if (r->next[*s - 'a'] == NULL)
return nr-1;
else
return prefix(r->next[*s - 'a'], s+1);
}
}
int main () {
sursa=new trie;
while(fin>>op>>s){
if(op==0)
inserare(sursa,s);
if(op==1)
stergere(sursa,s);
if(op==2)
fout<<aparitii(sursa,s)<<"\n";
if(op==3){
nr=0;
fout<<prefix(sursa,s)<<"\n";
}
}
return 0;
}