Cod sursa(job #1162083)

Utilizator rockerboyHutter Vince rockerboy Data 31 martie 2014 16:57:49
Problema Trie Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream f("trie.in");
ofstream g("trie.out");

struct csp
{
    int db, szovege;
    csp* kov[26];
    csp()
    {
        db = 0;
        szovege = 0;
        memset (kov, NULL, 104);
    }
};
typedef csp* mut_csp;
int t, n, i, h, j;
string akts;
mut_csp gyoker, akt;

void betesz (string s)
{
    for (i=0; i<=h; i++)
    {
        if (akt->kov[s[i]-'a'] == NULL) akt->kov[s[i]-'a'] = new csp;
        akt = akt->kov[s[i]-'a'];
        akt->db ++;
    }
    akt->szovege++;
}

void torol (string s)
{
    for (i=0; i<=h; i++)
    {
        akt = akt->kov[s[i]-'a'];
        akt->db --;
    }
    akt->szovege--;
}

void kiirdb (string s)
{
    for (i=0; i<=h; i++)
    {
        if (!akt->kov[s[i]-'a']) break;
        akt = akt->kov[s[i]-'a'];
    }
    g << akt->szovege << "\n";
}

void kiirhossz (string s)
{
    int i=0;
    while (akt->kov[s[i]-'a'] && akt->kov[s[i]-'a']->db)
    {
        akt = akt->kov[s[i]-'a'];
        i++;
    }
    g << i << "\n";
}

int main()
{
    gyoker = new csp;
    akt = new csp;
    while (f >> t >> akts)
    {
        h = akts.length() -1;
        akt = gyoker;
        if (t == 0) betesz(akts);
        else if (t == 1) torol(akts);
        else if (t == 2) kiirdb(akts);
        else if (t == 3) kiirhossz(akts);
    }
    return 0;
}