Cod sursa(job #2261897)

Utilizator toadehuPuscasu Razvan Stefan toadehu Data 16 octombrie 2018 19:50:25
Problema Trie Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <fstream>
#include <cstring>

#define CH (*s - 'a')

using namespace std;

ifstream fin("trie.in");
ofstream fout("trie.out");

struct Trie
{
    int pr;
    Trie *fii[26];
};

Trie *T= new Trie;

void adaug(Trie *p, char *s)
{
    p -> pr++;
    if(*s != '\0')
    {
        if(p->fii[CH] == NULL)
        {
            p->fii[CH] = new Trie();
        }
        adaug(p->fii[CH], s + 1);
    }
}

void elim( Trie *p, char *s)
{
    p->pr--;
    if(*s != '\0')
    {
        elim(p->fii[CH], s + 1);
    }
}

int apar(Trie *p, char *s)
{
    if(*s != '\0')
    {
        if(p->fii[CH] == NULL)
        {
            return 0;
        }
        else
        {
            return apar(p->fii[CH], s + 1);
        }
    }
    else
    {
        int res = p->pr;
        for(int i = 0; i < 26; i++)
        {
            if(p->fii[i] != NULL)
            {
                res -= p->fii[i]->pr;
            }
        }
        return res;
    }
}int prefix(Trie *p, char *s, int k){if(*s == '\0'){return k;}else{if(p->fii[CH] != NULL && 0 < p->fii[CH]->pr){return prefix(p->fii[CH], s + 1, k + 1);}else{return k;}}}int main(){char s[32];while(fin.getline(s, 31)){switch (s[0]){case '0':adaug(T,s+2);break;case '1':elim(T,s+2);break;case '2':fout<<apar(T,s+2)<<'\n';break;case '3':fout<<prefix(T,s+2,0)<<'\n';break;}}fin.close();fout.close();return 0;}