Cod sursa(job #239723)

Utilizator mihai.cuculiciCuculici Mihail mihai.cuculici Data 5 ianuarie 2009 17:34:35
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include<fstream>
using namespace std;

const int M = 9973;   
typedef struct List* Lista;
struct List
{
   long long Key;    
   Lista Next;
}; 
typedef Lista Hash[M];
Hash H;
int i,N,k;
long long x;

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

void initH(Hash H)
{
     for(i=0;i<M;H[i++]=NULL);
}

int hash(long long p)
{
    return p%9973;
}

void addH(Hash H, long long P)
{
     Lista L=new List;
     L->Key=P;
     L->Next=H[hash(P)];
     H[hash(P)]=L;
}

int searchH(Hash H, long long P)
{
       Lista L;
       for(L=H[hash(P)];L&&L->Key!=P;L=L->Next);
       return L!=NULL;
}

void deleteH(Hash H, long long P)
{
     
     if(H[hash(P)])
     {
       Lista L=H[hash(P)];
       if(L->Key==P)
       {
         H[hash(P)]=H[hash(P)]->Next;
         delete L;
         L=NULL;
       }  
       else
       {
           for(L;L->Next&&L->Next->Key!=P;L=L->Next);
           if(L)
           { 
              Lista C=L->Next;
              L->Next=C->Next;
              delete C;
              C=NULL;
           }   
       }
     }  
}

int main()
{
    initH(H);
    f>>N;
    for(i=0;i<N;i++)
    {
        f>>k>>x;
        if(k==1) addH(H,x);
        else if(k==2) deleteH(H,x);
             else g<<searchH(H,x)<<"\n";          
    }
    f.close();
    g.close();
    return 0;
}