Cod sursa(job #2154221)

Utilizator mateibanuBanu Matei Costin mateibanu Data 6 martie 2018 19:54:39
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <bits/stdc++.h>

using namespace std;

struct nod{
    int nr,val;
    nod *urm[26];

    nod() {
        nr=0;
        val=0;
        memset(urm,0,sizeof(urm));
    }
};

char s[25];

nod *o = new nod;

void add(){
    int i,n;
    nod *x=o;
    n=strlen(s);
    for (i=0;i<n;i++){
        if (x->urm[s[i]-'a']==0){
            x->urm[s[i]-'a']= new nod;
        }
        x=x->urm[s[i]-'a'];
        x->nr++;
    }
    x->val++;
}

void del(){
    int i,n;
    nod *x=o;
    n=strlen(s);
    for (i=0;i<n;i++){
        x=x->urm[s[i]-'a'];
        x->nr--;
    }
    x->val--;
}

void apar(){
    int i,n;
    nod *x=o;
    n=strlen(s);
    for (i=0;i<n;i++){
        if (x->urm[s[i]-'a']==NULL){
            x->urm[s[i]-'a']= new nod;
        }
        x=x->urm[s[i]-'a'];
    }
    printf("%d\n",x->val);
}

void pref(){
    int i,n;
    nod *x=o;
    n=strlen(s);
    for (i=0;i<n;i++){
        if (x->urm[s[i]-'a']==NULL){
            x->urm[s[i]-'a']= new nod;
        }
        x=x->urm[s[i]-'a'];
        if (x->nr<2) break;
    }
    printf("%d\n",i+1);
}

int main()
{
    freopen("trie.in","r",stdin);
    freopen("trie.out","w",stdout);

    int t;

    while (scanf("%d %s",&t,s)!=EOF){
        if (t==0) add();
        else if (t==1) del();
        else if (t==2) apar();
        else pref();
    }

    return 0;
}