Pagini recente » Cod sursa (job #2964927) | Cod sursa (job #1398244) | Cod sursa (job #1282015) | Cod sursa (job #2534668) | Cod sursa (job #1067104)
#include<fstream>
#include<string.h>
using namespace std;
struct node{
int ap,nr;//ap -aparitii; nr - nr fii
node *fii[30];
node(){
ap =0; nr = 0;
memset( fii, 0, sizeof( fii ) );
}
};
node *trie1 = new node;
void adauga(node * nod,char *s){
if(s[0]==0){
nod->ap++;return;
}
if(!nod->fii[s[0]-'a']){
nod->fii[s[0]-'a'] = new node;
nod->nr++;
}
adauga(nod->fii[s[0]-'a'],s+1);
}
int sterge(node * nod , char *s){
if(s[0]==0){
nod->ap--;
}else if (sterge(nod->fii[s[0]-'a'],s+1)){
nod->nr--;
nod->fii[s[0]-'a']=0;
}
if(nod!=trie1 && nod->nr==0 && nod->ap==0){
delete nod;
return 1;
}
return 0;
}
int aparitii(node * nod,char *s){
if(s[0]==0)return nod->ap;
aparitii(nod->fii[s[0]-'a'],s+1);
}
int prefix(node * nod, char *s){
if(s[0]==0 || nod->fii[s[0]-'a'] == 0) return 0;
return (prefix(nod->fii[s[0]-'a'],s+1) + 1);
}
main(){
ifstream fin("trie.in");
ofstream fout("trie.out");
// freopen( "trie.in", "r", stdin );
//freopen( "trie.out", "w", stdout );
char s[30];
int x;
//while(!feof()){
// fgets( s, 5, stdin );
// }
while(fin>>x>>s){
switch(x){
case 0:adauga(trie1,s); break;
case 1:sterge(trie1,s); break;
case 2:fout<<aparitii(trie1,s)<<"\n"; break;
case 3:fout<<prefix(trie1,s)<<"\n"; break;
}
}
// char go[]={'1','2','9'};
;
//fgets( line, 32, stdin );
fin.close(); fout.close();
}