Cod sursa(job #2079164)

Utilizator patcasrarespatcas rares danut patcasrares Data 30 noiembrie 2017 17:59:22
Problema Trie Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include<fstream>
#include<vector>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
char x[35];
int p;
struct trie
{
    int nrc=0,nra=0;
    trie *c[29]={0};
};
trie *t=new trie;
void inserare(trie *nod,char *s)
{
    if(*s==0)
    {
        nod->nra++;
        return;
    }
    if(!nod->c[*s-'a'])
    {
        nod->nrc++;
        nod->c[*s-'a']=new trie;
    }
    inserare(nod->c[*s-'a'],s+1);
}
int del(trie *nod,char *s)
{
    if(*s==0)
        nod->nra--;
    else
        if(del(nod->c[*s-'a'],s+1))
        {
            nod->c[*s-'a']=0;
            nod->nrc--;
        }
    if(nod->nrc==0&&nod!=t)
    {
        delete nod;
        return 1;
    }
    return 0;
}
int nrap(trie *nod,char *s)
{
    if(*s==0)
        return nod->nra;
    if(nod->c[*s-'a'])
        return nrap(nod->c[*s-'a'],s+1);
    return 0;
}
int prefix(trie *nod,char *s,int k)
{
    if(*s==0||!nod->c[*s-'a'])
        return k;
    return prefix(nod->c[*s-'a'],s+1,k+1);
}
int main()
{
    while(fin>>p)
    {
        fin>>x;
        if(p==0)
            inserare(t,x);
        if(p==1)
            del(t,x);
        if(p==2)
        {
            fout<<nrap(t,x);
            fout<<'\n';
        }
        if(p==3)
        {
            fout<<prefix(t,x,0);
            fout<<'\n';
        }
    }
}