Cod sursa(job #2641350)

Utilizator MoldovanAndrei1Moldovan Andrei MoldovanAndrei1 Data 11 august 2020 10:22:00
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <bits/stdc++.h>
using namespace std;
struct Trie
{
    int cnt = 0 , nr_fii = 0 ;
    Trie *fiu[26];
    Trie(){
    cnt = nr_fii = 0 ;
    memset(fiu , 0  , sizeof(fiu));
    }
};

Trie *T = new Trie;
void insertword(Trie *nod , char *s)
{
    if(*s == '\n')
    {nod->cnt++;return ;}
    if(nod->fiu[*s-'a'] == 0 )
        {++nod->nr_fii;
        nod->fiu[*s-'a'] = new Trie;}

    insertword(nod->fiu[*s-'a'] , s+1);
}

bool deleteword(Trie *nod , char *s)
{
    if(*s == '\n')
        nod->cnt--;
    else
        if(deleteword(nod->fiu[*s-'a'],s+1))
    {
        nod->fiu[*s-'a'] = 0 ;
        nod->nr_fii --;
    }
    if(nod->cnt == 0 && nod->nr_fii == 0 && nod!=T)
    {
        delete nod;
        return 1;
    }
    return 0;
}
int que(Trie *nod , char *s)
 {
     if(*s == '\n')return nod->cnt;
     if(nod->fiu[*s-'a'] == 0)return 0;
     return que(nod->fiu[*s-'a'],s+1);
}
int prefix(Trie *nod , char *s , int k)
{
    if(*s == '\n')return k;
    if(nod->fiu[*s-'a']== 0)
        return k;
        return prefix(nod->fiu[*s-'a'],s+1,k+1);
}
int nr;
char s[32];
int main()
{
    freopen("trie.in","r",stdin);
    freopen("trie.out","w",stdout);
    fgets(s,32,stdin);
    while(!feof(stdin))
    {
        nr = s[0]-'0';
        if(nr == 0)insertword(T,s+2);
        if(nr == 1)deleteword(T,s+2);
        if(nr == 2)cout<<que(T,s+2)<<'\n';
        if(nr ==3)cout<<prefix(T,s+2,0)<<'\n';
        fgets(s,32,stdin);
    }
    return 0;
}