Cod sursa(job #1926759)

Utilizator adystar00Bunea Andrei adystar00 Data 14 martie 2017 17:45:32
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
struct Trie
{
    int cnt,nrfii;
    Trie *fiu[30];
    Trie()
    {
        nrfii=cnt=0;
        memset(fiu,0,sizeof(fiu));
    }
};
Trie *T = new Trie;
char s[30];
void ins (Trie *node, char *s)
{
    if(*s==0)
    {
        node->cnt++;
        return;
    }
    if(node->fiu[*s-'a']==0)
    {
        node->fiu[*s-'a'] = new Trie;
        node->nrfii++;
    }
    ins(node->fiu[*s-'a'],s+1);
}
int del (Trie *node, char *s)
{
    if(*s==0)
        node->cnt--;
    else if(del(node->fiu[*s-'a'],s+1)==1)
    {
        node->fiu[*s-'a']=0;
        node->nrfii--;
    }
    if(node->cnt==0&&node->nrfii==0&&node!=T)
    {
        delete node;
        return 1;
    }
    return 0;
}
int query(Trie *node, char *s)
{
    if(*s==0)
        return node->cnt;
    if(node->fiu[*s-'a']!=0)
        return query(node->fiu[*s-'a'],s+1);
    return 0;
}
int prefix (Trie *node, char *s, int k)
{
    if(*s==0||node->fiu[*s-'a']==0)
        return k;
    return prefix(node->fiu[*s-'a'],s+1,k+1);
}
int main()
{
    ifstream fin ("trie.in");
    ofstream fout ("trie.out");
    int q;
    while(fin>>q)
    {
        fin>>s;
        //cout<<q<<" ";
        if(q==0)
            ins(T,s);
        if(q==1)
            del(T,s);
        if(q==2)
            fout<<query(T,s)<<"\n";
        if(q==3)
            fout<<prefix(T,s,0)<<"\n";
    }
    return 0;
}