Cod sursa(job #561669)

Utilizator desoComan Andrei deso Data 21 martie 2011 01:24:27
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 2.13 kb
#include <iostream>
#include <fstream>
#include <sstream>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <set>
#include <map>
using namespace std;

typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<VVI> VVVI;
typedef long long LL;
typedef vector<LL> VLL;
typedef vector<VLL> VVLL;
typedef vector<double> VD;
typedef vector<VD> VVD;
typedef vector<string> VS;

#define pb push_back
#define sz size()
#define SORT(x) sort(x.begin(), x.end())
#define REVERSE(x) reverse(x.begin(), x.end())
#define REP(x, hi) for (size_t x=0; x<(hi); x++)
#define REPD(x, hi) for (size_t x=((hi)-1); x>=0; x--)
#define FOR(x, lo, hi) for (size_t x=(lo); x<(hi); x++)
#define FORD(x, lo, hi) for (size_t x=((hi)-1); x>=(lo); x--)
#define FORALL(it,x) for (typeof(x.begin()) it=x.begin(); it!=x.end(); it++)
#define INFILE "hashuri.in" 
#define OUTFILE "hashuri.out"

ifstream fin (INFILE);
ofstream fout (OUTFILE);

#define MOD 1000003

struct nod{
  int val;
  nod* next;
  nod() : val(0), next(NULL) {}
};

nod* table[MOD] = {NULL};

int contains(int x)
{
  int key = x % MOD;
  nod* n = table[key];
  while( n!=NULL)
  {
    if( n->val==x )
      return 1;
    n = n->next;
  }
  return 0;
}

void add(int x)
{
  if( contains(x) )
    return;

  int key = x % MOD;
  nod* nx = new nod();
  nx->val = x;
  if( table[key]==NULL)
  {
    table[key] = nx;
  }
  else
  {
    nod* n = table[key];
    while( n->next!=NULL )
      n = n->next;
    n->next = nx;
  }
}

void del(int x)
{
  int key = x % MOD;
  nod* n = table[key];
  if( n==NULL ) 
    return;
  if( n->val==x )
  {
    table[key] = n->next;
    delete n;
  }
  else
    while( n->next!=NULL )
    {
      if( n->next->val==x )
      {
        nod* aux = n->next;
        n->next = aux->next;
        delete aux;
      }
      n = n->next;
    }
}

int main()
{
  int n, nr;
  char op;
  fin >> n;
  while( n-- )
  {
    fin >> op >> nr;
    if( op=='1' ) add(nr);
    else if( op=='2' ) del(nr);
    else fout << contains(nr) << endl;
  }

	
	return 0;
}