Cod sursa(job #806472)

Utilizator UnforgivenMihai Catalin Botezatu Unforgiven Data 2 noiembrie 2012 21:46:00
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include <vector>
#include <cstdio>
#include <algorithm>
#define BIG 666013

using namespace std;

vector <long> hash[BIG];

long find(long x)
{
   long mod = x % BIG;
   for (long i=0;i<hash[mod].size();i++)
   {
        if (hash[mod][i] == x) return i;

   }
   return -1;
}

void add(long x)
{
    long mod = x % BIG;
    if (find(x) == -1)
    {
        hash[mod].push_back(x);
    }

}

void erase(long long x)
{
    long mod = x % BIG;
    long poz = find(x);
    if (poz != -1)
    {
        long fin = hash[mod].size() - 1;
        long aux = hash[mod][fin];
        hash[mod][fin] = hash[mod][poz];
        hash[mod][poz] = aux;
        hash[mod].pop_back();
    }
}

int main()
{
    FILE *input = fopen("hashuri.in","r");
    FILE *output = fopen("hashuri.out","w");

    long n;
    fscanf(input,"%ld",&n);

    for (long i=0;i<n;i++)
    {
        int op;
        long x;
        fscanf(input,"%d",&op);
        fscanf(input,"%ld",&x);
        if (op == 1)
        {
            add(x);
        }
        if (op == 2)
        {
            erase(x);
        }
        if (op == 3)
        {
            long rasp = find(x);
            if (rasp != -1) fprintf(output,"%d\n",1);
            else fprintf(output,"%d\n",0);

        }
    }
    fclose(input);
    fclose(output);
    return 0;
}