Cod sursa(job #2091549)

Utilizator CatapaPap Catalin Catapa Data 19 decembrie 2017 20:31:17
Problema Trie Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 1.94 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

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

struct trie
{
    int cnt;
    trie *fiu[27];

    trie()  ///constructorul structurii. Se va apela de fiecare data cand cream un nod de tipul trie
    {
        cnt = 0;
        memset(fiu, 0, sizeof(fiu));
    }
};

void add_word(trie *nod, char *s)
{
    if(*s==NULL)  ///Daca am ajuns la finalul cuvantului
    {
        nod->cnt++;
        return;
    }
    int delta = *s - 'a'; ///Aflam care e urmatorul nod in care vom merge
    if(nod->fiu[delta] == NULL)
    {
        nod->fiu[delta] = new trie();
       // node->nrs++;
    }

    add_word(nod->fiu[delta], s+1);
}

int find_word(trie *nod, char *s)
{
    if(*s==NULL)
        return nod->cnt;

    int delta = *s - 'a';

    if(nod->fiu[delta]==NULL)
        return 0;

    find_word(nod->fiu[delta], s+1);
}

void delete_word(trie *nod, char *s)
{
    if(*s==NULL)
    {
        nod->cnt--;
        return;
    }
    int delta = *s - 'a';
    if(nod->fiu[delta] == NULL)
        return;
    delete_word(nod->fiu[delta], s+1);

}

int find_longest_prefix(trie *nod, char *s)
{
    if(*s == NULL)
        return 0;

    int delta = *s - 'a';

    if(nod->fiu[delta] == NULL)
        return 0;

    return 1 + find_longest_prefix(nod->fiu[delta], s+1);

}

trie *root = new trie();

int main()
{

    int operationType;
    char cuvant[25];

    while(f >> operationType >> cuvant)
    {

        switch(operationType)
        {
        case 0:
            add_word(root, cuvant);
            break;
        case 1:
            delete_word(root, cuvant);
            break;
        case 2:
            g << find_word(root, cuvant) << "\n";
            break;
        case 3:
            g << find_longest_prefix(root, cuvant) << "\n";
            break;

        }
    }
    return 0;
}