Pagini recente » Cod sursa (job #630906) | Cod sursa (job #1519338) | Cod sursa (job #2962829) | Cod sursa (job #2274307) | Cod sursa (job #239948)
Cod sursa(job #239948)
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
char s[30];
struct trie {
int ap,fii;
trie *vfii[ 26 ];
trie() {
ap=0;
fii=0;
memset(vfii,0,sizeof(vfii));
}
};
trie *rad=new trie;
void aadaugare(trie *a,int i){
if(s[i]=='\n'){
a->ap++;
return;
}
int x=s[i]-'a';
if(a->vfii[x]==0){
a->vfii[x]=new trie;
a->fii++;
aadaugare(a->vfii[x],i+1);
}
}
int stergere(trie *a,int i){
if(s[i]=='\n')
a->ap--;
else
if(stergere(a->vfii[s[i]-'a'],i+1)){
a->vfii[s[i]-'a']=0;
a->fii--;
}
if(a->ap==0&&a->fii==0&&a!=rad){
delete a;
return 1;
}
return 0;
}
int nr_ap( trie *a,int i) {
if(s[i]=='\n' )
return a->ap;
if(a->vfii[s[i]-'a'])
return nr_ap(a->vfii[s[i]-'a'],i+1);
return 0;
}
int prefix_max(trie *a,int i){
if((s[i]=='\n')||(!a->vfii[s[i]-'a']))
return 0;
return prefix_max(a->vfii[s[i]-'a'],i+1)+1;
}
int main(){
while (!fin.eof()){
fin.getline(s,30);
if(s[0]=='0')
aadaugare(rad,2);
else
if(s[0]=='1')
stergere(rad,2);
else
if(s[0]=='2')
fout<<nr_ap(rad,2)<<"\n";
else
if(s[0]=='0')
fout<<prefix_max(rad,2)<<"\n";
}
return 0;
}