Cod sursa(job #2233380)

Utilizator danielsociuSociu Daniel danielsociu Data 23 august 2018 08:50:35
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.59 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++;
    }
    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[32];
    while(!cin.eof()){
        memset(s,0,sizeof s);
        cin.getline(s,32);
        switch(s[0]){
                case '0':
                    ins(T,s+2);
                    break;
                case '1':
                    del(T,s+2);
                    break;
                case '2':
                    cout<<que(T,s+2);
                    break;
                case '3':
                    cout<<pref(T, s+2, 0);
                    break;
                default:
                    cout<<"You're on nutz\n";
                    break;
            }

    }
}