Cod sursa(job #2231359)

Utilizator eduardandrei20Nechifor Eduard Andrei eduardandrei20 Data 13 august 2018 22:08:17
Problema Trie Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 1.67 kb
#include <bits/stdc++.h>
#define ch (*s-'a')
using namespace std;
ifstream in ("trie.in");
ofstream out("trie.out");

char s[28];

struct trie
{int nr , fii;
    trie *fiu[28];
    trie()
    {
        nr=fii=0;
         memset(fiu,0,sizeof(fiu));
    }
};

trie *dict= new trie;

void adaug (trie *t, char *s)
{
    if(*s==NULL)
    {
        // daca am terminat cuvantul
        t->nr++;
        return ;
    }
    if(!t->fiu[ch])
    {
        t->fiu[ch]=new trie;
        t->fii++;
    }
    adaug(t->fiu[ch],s+1);
}

int prefix( trie *t, char *s, int k)
{
    if(*s==NULL or !t->fiu[ch] )
    {
        return k;
    }
     prefix(t->fiu[ch],s+1,k+1);
}

int nr_ap(trie *t, char *s)
{
    if(*s==NULL)
    {
        return t->nr;
    }
    if(t->fiu[ch])
   return  nr_ap(t->fiu[ch],s+1);
   return 0;
}

int del(trie *t, char *s)
{
    if(*s==NULL)
    {
        t->nr--;
    }

    else
   {
       if(  del(t->fiu[ch],s+1) )
    {
        // daca pot sa il sterg pe urmatoru
        t->fiu[ch]=0;
        t->fii--;
    }
    else
    {
        if(t->fii==0 and t->nr==0 and t!=dict)
        {
            delete t;
            return 1;
        }
    }
   }
    return 0;
}

int main()
{

      in.getline(s,28);
      while(!in.eof())
      {
          if(s[0]=='0')
          {
              adaug(dict,s+2);
          }
          else if(s[0]=='1')
          {
              del(dict,s+2);
          }
          else if(s[0]=='2')
          {
              out<<nr_ap(dict,s+2)<<"\n";
          }
          else out<<prefix(dict,s+2,0)<<"\n";
          in.getline(s,28);
      }

    return 0;
}