Cod sursa(job #750642)

Utilizator blk.irineluIrina Ursateanu blk.irinelu Data 22 mai 2012 18:43:46
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.32 kb
#include<fstream>
#include<string.h>
#define CH (s[i]-'a')

using namespace std;

ifstream f("trie.in");
ofstream g("trie.out");

struct trie
{
    int nr_cuv;
    int nr_fii;
    trie *litera[26];
    trie()
    {
        nr_cuv=0;
        nr_fii=0;
        //for(int i=0;i<=26;i++)
         //litera[i]=0;
        memset(litera,0,sizeof(litera));
    }
};
trie *T=new trie;

void insert(char s[21])
{
    int i=0;
    trie *t=T;
    while(i<=strlen(s))
     { if (i==strlen(s))
          {
              t->nr_cuv++;
              return;
          }
        if(t->litera[CH]!=0)
        {
              t->nr_fii++;
              t=t->litera[CH];
              i++;
        }
        else
         if(t->litera[CH]==0)
         {
             t->litera[CH]=new trie;
             t->nr_fii++;
             t=t->litera[CH];
             i++;
        }

    }
}

void del(char s[21])
{ int i=0;
  trie *t=T;
  while(i<=strlen(s))
  {  if(i==strlen(s) && t->nr_cuv>=0)
       { t->nr_cuv--; return;}
     if(t->litera[CH]!=0)
       { t->nr_fii--; t=t->litera[CH]; i++; }
  }
}

void ap(char s[21])
{
    int i=0;
    trie *t=T;
    while(i<=strlen(s))
    {
        if (i==strlen(s))
        {
           g<<t->nr_cuv<<"\n";
           return ;
        }
        if (t->litera[CH]!=0)
        {
           t=t->litera[CH];
           i++;
        }
         else
         {
              g<<"0\n";
              return;
        }
   }
}

void pref(char s[21])
{
    int i=0,prefix=0;
    trie *t=T;
    while(i<=strlen(s))
    {
    if(i==strlen(s))
    {
        g<<strlen(s)<<"\n";
        return;
    }
    if(t->litera[CH]==0)
    {
         g<<prefix<<"\n";
         return ;
    }
    if(t->litera[CH]!=0)
    {
        t=t->litera[CH];
        if (t->nr_fii==0 && t->nr_cuv==0 )
        {
            g<<i<<"\n";
            return;
        }
        else
        {
            i++;
            prefix=i;
        }
    }
   else
    {
         g<<prefix<<"\n";
         return ;
    }
}}

int main()
{
  int op_cod;
  char s[21];
  while(f>>op_cod)
  {
      f>>s;
      if(op_cod==0)
       insert(s);
      if(op_cod==1)
       del(s);
      if(op_cod==2)
        ap(s);
      if(op_cod==3)
        pref(s);
  }
  return 0;
}