Pagini recente » Cod sursa (job #1603075) | Cod sursa (job #283280) | Cod sursa (job #2234919) | Cod sursa (job #1828329) | Cod sursa (job #2469737)
//#include <iostream>
#include <fstream>
using namespace std;
struct Trie{
int nrcuv,nrfii;
Trie *fii[30];
Trie(){
nrcuv=0;
nrfii=0;
for(int j=0;j<=27;j++){
fii[j]=0;
}
}
};
Trie *T= new Trie;
string s;
void ins(Trie *nod,int ind){
if(ind==s.size()){
nod->nrcuv++;
}
else{
if(nod->fii[s[ind]-'a']==0){
nod->nrfii++;
nod->fii[s[ind]-'a']=new Trie;
}
ins(nod->fii[s[ind]-'a'],ind+1);
}
}
bool del(Trie *nod,int ind){
if(ind==s.size()){
nod->nrcuv--;
}
else{
if(del(nod->fii[s[ind]-'a'],ind+1)!=0){
nod->fii[s[ind]-'a']=0;
nod->nrfii--;
}
}
if(nod!=T and nod->nrfii==0 and nod->nrcuv==0){
delete nod;
return 1;
}
return 0;
}
int aparitii(Trie *nod,int ind){
if(ind==s.size()){
return nod->nrcuv;
}
if(nod->fii[s[ind]-'a']==0)
return 0;
return aparitii(nod->fii[s[ind]-'a'],ind+1);
}
int prefix(Trie *nod,int ind){
if(ind==s.size() or nod->fii[s[ind]-'a']==0)
return ind;
return prefix(nod->fii[s[ind]-'a'],ind+1);
}
ifstream cin("trie.in");
ofstream cout("trie.out");
int main()
{
int a;
while(cin>>a){
//cin.get();
cin>>s;
//cout<<s<<"\n";
if(a==0){
ins(T,0);
}
if(a==1){
del(T,0);
}
if(a==2){
cout<<aparitii(T,0)<<"\n";
}
if(a==3){
cout<<prefix(T,0)<<"\n";
}
}
return 0;
}