Cod sursa(job #749988)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 19 mai 2012 21:58:57
Problema Trie Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include <fstream>
#include <cstring>
#define cifra T[poz]-'a'
#define LE 50005

using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct two
{
  int litere,link,okz;
} trie[LE][30];
string T;
int nNew;
void afis()
{
  g<<'\n';
  for(int i=0; i<=15; ++i,g<<'\n')
    for(int j=0; j<=26; ++j)
      g<<(char)(j+'a')<<" "<<trie[i][j].litere<<"  ";
}
int cLink;


int Push(int semn)
{
  int poz=0;
  int lung=T.length()-1;
  int lungime=0;
  while (poz<=lung)
    {
      trie[cLink][cifra].litere+=semn;

      if (poz==lung)
        {
          trie[cLink][cifra].okz+=semn;
          break;
        }

      if (semn==0)
        if (trie[cLink][cifra].litere==0)
          {
            --poz;
            break;
          }

      if (trie[cLink][cifra].link==0&&semn==1)
        {
          trie[cLink][cifra].link=nNew+1;
          cLink=++nNew;

        }
      else
        cLink=trie[cLink][cifra].link;
      ++poz;
    }

  return poz;
}
int main()
{
  int tip=33;
  int last;

  while ( f>>tip)
    {
      cLink=0;
      f>>T;

      if(tip==0)
        {
          Push(1);
        }
      if (tip==1)
        Push(-1);

      if (tip==2)
        {
          if (Push(0)==T.length()-1)
            {
              last=T[T.length()-1]-'a';

              g<<trie[cLink][last].okz;
            }
          else g<<0;
          g<<'\n';
        }

      if (tip==3)
        g<<Push(0)+1<<'\n';

    }


  f.close();
  g.close();
  return 0;
}