Cod sursa(job #2085299)

Utilizator MihaelaCismaruMihaela Cismaru MihaelaCismaru Data 9 decembrie 2017 21:52:18
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.92 kb
#include<fstream>
using namespace std;
ifstream in ("trie.in");
ofstream out ("trie.out");
char s[30];
int n,x;
struct trie {
    int fii, numar;
    trie *v[26];
    trie () {
        fii = 0;
        numar = 0;
        for (int i = 0; i <= 25; i ++) {
            v[i] = 0;
        }
    }
};
trie *radacina = new trie;
void adauga (trie *&nod , int i) {
    if (s[i] == 0) {
        nod -> numar ++;
        return;
    }
    if (nod -> v[s[i]-'a'] == NULL) {
        nod -> v[s[i]-'a'] = new trie;
        nod -> fii ++;
    }
    adauga (nod -> v[s[i]-'a'], i + 1);
    return;
}
bool sterge (trie *&nod, int i) {
    if (s[i] == 0) {
        nod -> numar --;
        if (nod -> numar == 0 && nod -> fii == 0 && nod != radacina) {
            delete nod;
            nod = 0;
            return 1;
        }
    }
    else{
        if (sterge(nod -> v[s[i]-'a'] , i + 1)) {
            nod -> fii --;
            if (nod -> fii == 0 && nod -> numar == 0 && nod != radacina) {
                delete nod;
                nod = 0;
                return 1;
            }
        }
    }
    return 0;
}
int lungime (trie *nod, int i) {
    if (nod -> v[s[i]-'a'] == NULL) {
        return 0;
    }
    if (s[i] == 0) {
        return 0;
    }
    return 1 + lungime (nod->v[s[i]-'a'], i+1);

}
int numara (trie *nod, int i) {
    if (nod == NULL) {
        return 0;
    }
    if (s[i] == 0) {
        return nod -> numar;
    }
    else{
        return numara (nod -> v[s[i]-'a'] , i + 1);
    }
}
int main (void) {
    while (in >> x) {
        in  >> s;
        if (x == 0) {
            adauga (radacina, 0);
        }
        if (x == 1) {
            sterge (radacina, 0);
        }
        if (x == 2) {
            out << numara (radacina,0) <<"\n";
        }
        if (x == 3) {
            out << lungime (radacina,0)<<"\n";
        }
    }
    return 0;
}