Cod sursa(job #1279985)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 1 decembrie 2014 12:13:48
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
 struct trie
 {
   int fin,ap;
   trie * fiu[30];
   trie()
   {
      for(int i=1;i<=27;i++)
      fiu[i]=NULL;

     fin=0; ap=0;

   }
 } ;

  trie rad , * act ;

  int tip; char s[25];

 void Change(char sir[25],int val)
 { int i,len=strlen(sir),x;
     act=&rad;

    for(i=0;i<len;i++)
    {  x=sir[i]-96;

      if (act->fiu[x]==NULL) act->fiu[x]= new trie;
       act=act->fiu[x];
       act->ap+=val;
    }

   act->fin+=val;
 }

 int Count(char sir[25])
 { int i,len=strlen(sir),x;
     act=&rad;

    for(i=0;i<len;i++)
    {  x=sir[i]-96;

      if (act->fiu[x]==NULL) return 0;
       act=act->fiu[x];
    }

   return act->fin;
 }

 int Prefix(char sir[25])
 { int i,len=strlen(sir),x;

     act=&rad;

    for(i=0;i<len;i++)
    {  x=sir[i]-96;

      if (act->fiu[x]==NULL) return i;
       act=act->fiu[x];
      if (act->ap==0) return i;
    }

   return len;
 }

int main ()
{

  while(f>>tip>>s)
  {

     if (tip==0) Change(s,1);
     if (tip==1) Change(s,-1);
     if (tip==2) g<<Count(s)<<"\n";
     if (tip==3) g<<Prefix(s)<<"\n";
  }

  return 0;
}