Cod sursa(job #1563719)

Utilizator 2chainzTauheed Epps 2chainz Data 6 ianuarie 2016 15:53:14
Problema Trie Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#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;
}