Cod sursa(job #1074806)

Utilizator nod_softwareBudisteanu Ionut Alexandru nod_software Data 7 ianuarie 2014 23:11:45
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.37 kb
#include <cstdio>
#include <vector>
#define _iModulo 666013
using namespace std;

class THash
{
   public:
       vector <long> m_vHash[_iModulo];

       THash();

       void Add(int iElement);
       void Delete(int iElement);
       long Search(int iElement);
   private:

   protected:
};

//-------------------------------------------------------
long THash::Search(int iElement)
{
    long k=iElement%_iModulo;

   for (long i=0;i<m_vHash[k].size();i++)
   {
      if (m_vHash[k][i] == iElement)
         return 1;
   }
   return 0;

   return NULL;
}
//-------------------------------------------------------
THash::THash()
{

}
//-------------------------------------------------------
void THash::Add(int iElement)
{
   long k=iElement%_iModulo;

   for (long i=0; i<m_vHash[k].size(); i++)
      if (m_vHash[k][i] == iElement) return ;

   m_vHash[k].push_back(iElement);
}
//-------------------------------------------------------
void THash::Delete(int iElement)
{
   long k= iElement%_iModulo;
   long lLast,lFirst,lSecond;

   int iOk=0;

   for ( long i=0; i<m_vHash[k].size();i++)
      if (m_vHash[k][i] == iElement)
      {
         iOk=1;
         lLast=i;
      }

    if (iOk==1)
    {
       lFirst= m_vHash[k].size()-1;
       lSecond= m_vHash[k][lFirst];
       m_vHash[k][lFirst]=m_vHash[k][lLast];
       m_vHash[k][lLast]=lSecond;
       m_vHash[k].pop_back();
    }
}
//-------------------------------------------------------
//-------------------------------------------------------
void ReadData()
{
   FILE * fIn = fopen("hashuri.in","r");
   FILE * fOut = fopen("hashuri.out","w");

   THash * objHash;
   objHash = new THash();

   int iN;

   fscanf(fIn,"%d",&iN);
   for (int i=0; i<iN; i++)
   {
      int iCase,iNumber;

      fscanf(fIn,"%d",&iCase);
      fscanf(fIn,"%d",&iNumber);
      switch(iCase)
      {
         case 1:
         {
            objHash->Add(iNumber);
            break;
         }
         case 2:
         {
            objHash->Delete(iNumber);
            break;
         }
         case 3:
         {
            fprintf(fOut,"%d\n",objHash->Search(iNumber));
            break;
         }
      }
   }

   fclose(fIn);
   fclose(fOut);
}
//-------------------------------------------------------
int main()
{
   ReadData();
   return 0;
}