Pagini recente » Cod sursa (job #1903233) | Cod sursa (job #1027205) | Cod sursa (job #3178152) | Cod sursa (job #2841287) | Cod sursa (job #1563719)
#include<fstream>
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
struct tr{
int ap,r; tr* to[27];
tr(){ap=r=0;for(char z='a';z<='z';z++)to[z-'a']=NULL;}
}*root;
void psh(char *s){tr* w=root;w->ap++;while(*s){if(w->to[*s-'a']==NULL) w->to[*s-'a']=new tr();w=w->to[*s-'a'];w->ap++;s++;}w->r++;}
void dl(char *s){tr* w=root;w->ap--;while(*s){tr *p=w;w=w->to[*s-'a'];if(p->to[*s-'a']->ap==1) p->to[*s-'a']=NULL;if(p->ap==0) delete p;w->ap--;s++;}w->r--;}
int ap(char *s){tr* w=root;while(*s){if(w->to[*s-'a']==NULL) return 0;w=w->to[*s-'a'];s++;}return w->r;}
int pref(char *s){tr* w=root;int ans=0;while(*s){if(w->to[*s-'a']==NULL) return ans;w=w->to[*s-'a'];ans++,s++;}return ans;}
int main(){
root=new tr();
int t;char s[30];
while(in>>t){
in>>s;
if(t==0) psh(s);
if(t==1) dl(s);
if(t==2) out<<ap(s)<<'\n';
if(t==3) out<<pref(s)<<'\n';
}
return 0;
}