Cod sursa(job #2154623)

Utilizator vlad6001Pintilie Vlad vlad6001 Data 7 martie 2018 09:40:09
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.25 kb
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;

ifstream cin("trie.in");
ofstream cout("trie.out");

int tip, lg;
char cuvant[30], litera;

struct Trie
{
    int terminat;
    int cate;
    Trie *urm[30];
    Trie()
    {
        for(int i=0; i <= 29; i++)
        urm[i] = NULL;
        terminat = 0;
        cate = 0;
    }
};

int main()
{
    Trie *start;
    start = new Trie;
    while(cin >> tip >> cuvant)
    {
        if(tip == 0)
        {
            lg = strlen(cuvant);
            Trie *poz;
            poz = start;

            for(int i=0; i < lg; i++)
            {
                litera = cuvant[i];
                if(poz->urm[litera-'a'+1] == NULL)
                {
                    poz->urm[litera-'a'+1] = new Trie;
                }
                poz = poz->urm[litera-'a'+1];
                poz->cate++;
            }
            poz->terminat++;
        }
        else
        if(tip == 1)
        {
            lg = strlen(cuvant);
            Trie *poz;
            poz = start;

            for(int i=0; i < lg; i++)
            {
                litera = cuvant[i];
                poz = poz->urm[litera-'a'+1];
                poz->cate--;
            }
            poz->terminat--;
        }
        else
        if(tip == 2)
        {
            lg = strlen(cuvant);
            Trie *poz;
            poz = start;
            int i;
            for(i=0; i < lg; i++)
            {
                litera = cuvant[i];
                if(poz->urm[litera-'a'+1] == NULL)
                break;
                poz = poz->urm[litera-'a'+1];
            }
            if(i == lg)
            cout << poz->terminat << '\n';
            else
            cout << 0 << '\n';
        }
        else
        if(tip == 3)
        {
            lg = strlen(cuvant);
            Trie *poz;
            poz = start;
            int i=0;
            for(i=0; i < lg; i++)
            {
                litera = cuvant[i];
                if(poz->urm[litera-'a'+1] == NULL || poz->urm[litera-'a'+1]->cate == 0)
                break;
                poz = poz->urm[litera-'a'+1];
            }
            cout << i << '\n';
        }
    }
}