Cod sursa(job #2233379)

Utilizator danielsociuSociu Daniel danielsociu Data 23 august 2018 08:36:20
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.57 kb
#include <fstream>
#include "string.h"
std::ifstream cin("trie.in");
std::ofstream cout("trie.out");
#define CH (*s-'a')

typedef struct trie{
    int nrfii,nrcuv;
    trie *l[28];
    trie(){
        nrcuv=nrfii=0;
    }
};
trie *T= new trie;

void ins(trie *tr, char *s){
    if(*s=='\0'){
        tr->nrcuv++; return;
        }
    if(tr->l[CH]==0){
        tr->l[CH]=new trie;
        tr->nrfii++;
    }
    cout<<s;
    ins(tr->l[CH],s+1);
}

int del(trie *tr, char *s){
    if(*s=='\0')
        tr->nrcuv--;
    else if(del(tr->l[CH],s+1)){
        tr->nrfii--;
        tr->l[CH]=0;
    }
    if(tr->nrcuv==0&&tr->nrfii==0&&tr!=T){
        delete tr; return 1;
    }
    return 0;
}

int que(trie *tr,char *s){
    if(*s=='\0')
        return tr->nrcuv;
    if(tr->l[CH])
        que(tr->l[CH],s+1);
    return 0;
}

int pref(trie *tr, char *s, int k){
    if(*s=='\0'||tr->l[CH]==0)
        return k;
    return pref(tr->l[CH],s+1,k+1);
}

int main()
{
    int tip; char s[250];
    while(cin>>tip){
        memset(s,0,sizeof s);
        cout<<s<<'\n';
        cin.getline(s,250);
        switch(tip){
            case 0:
                ins(T,s);
                cout<<'\n';
                break;
            case 1:
                del(T,s);
                break;
            case 2:
                que(T,s);
                break;
            case 3:
                pref(T, s, 0);
                break;
            default:
                cout<<"You're on nutz\n";
                break;
        }

    }
}