Cod sursa(job #2282926)

Utilizator Raoul_16Raoul Bocancea Raoul_16 Data 14 noiembrie 2018 18:52:22
Problema Trie Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
//
//  Trie.cpp
//  
//
//  Created by Raoul Bocancea on 14/11/2018.
//

#include <fstream>
#include <cstring>

#define l *lit - 'a'

const std :: string programName = "trie";
std :: ifstream f(programName + ".in");
std :: ofstream g(programName + ".out");

class trie {

public:
    int nc,nf;
    trie *f[26];
    
    trie() {
        nc = nf = 0;
        memset(f, 0, sizeof f);
    }
    
    void ins(char *lit) {
        if(*lit) {
            if(!f[l]) {
                ++nf;
                f[l]=new trie;
            }
            f[l]->ins(lit + 1);
        }
        else
            ++nc;
    }
    
    bool del(char *lit) {
        if(!*lit)
            --nc;
        else if(f[l]->del(lit + 1)) {
            delete f[l];
            f[l] = 0;
            --nf;
        }
        if(nc or nf)
            return false;
        return true;
    }
    
    int nap(char *lit) {
        if(*lit) {
            if(f[l])
                return f[l]->nap(lit + 1);
            return 0;
        }
        return nc;
    }
    
    int pref(char *lit, int sz) {
        if(!*lit)
            return sz;
        if(f[l])
            return f[l]->pref(lit + 1, sz + 1);
        return sz;
    }
}t;

int main(void) {
    int quest;
    char s[21];
    while(f >> quest >> s)
        switch(op) {
        case 0:
            t.ins(cuv);
            break;
        case 1:
            t.del(cuv);
            break;
        case 2:
            g << t.nap(cuv) << '\n';
            break;
        case 3:
            g << t.pref(cuv, 0) << '\n';
            break;
    }
    return 0x0;
}