Cod sursa(job #969620)

Utilizator adrian79Dobrica Adrian adrian79 Data 4 iulie 2013 20:21:12
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>
#define long int
#define N 666013
using namespace std;

struct node
{
  long val;
  node* next;
};


struct hashtable
{
  node* T[N];
};

hashtable H;

int find(long x)
{
  long code = x % N;
  node* p = H.T[code];
  while (p != NULL)
  {
    if (p->val == x)
      return 1;
    p = p->next;
  }
  return 0;
}

void add(long x)
{
  if (find(x) == 1)
    return;
  else
  {
    node* aux = new node;
    aux->val = x;
    aux->next = H.T[x%N];
    H.T[x%N] = aux;
  }
}

void del(long x)
{
  long code = x%N;
  if (H.T[code] == NULL)
    return;
  else
  {
    if (H.T[code]->val == x)
    {
      H.T[code] = H.T[code]->next;
    }
    else
    {
      node* p = H.T[code];
      node* c = p->next;
      while (c != NULL && c->val != x)
      {
        c = c->next;
        p = p->next;
      }
      if (c == NULL)
        return;
      else
      {
        p->next = c->next;
        delete c;
      }
    }
  }
}

int main()
{
  long n = 0;
  int op = -1;
  long val = 0;
  ifstream f("hashuri.in");
  ofstream g("hashuri.out");
  f>>n;
  for (long i=0;i<n;i++)
  {
    f>>op>>val;
    switch(op)
    {
      case 1: add(val);break;
      case 2: del(val);break;
      case 3: g<<find(val)<<"\n";break;
      default:break;
    }
  }
  f.close();
  g.close();
  return 0;
}