Cod sursa(job #1314514)

Utilizator space.foldingAdrian Soucup space.folding Data 11 ianuarie 2015 22:31:31
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>
#define MAX 2000001
using namespace std;
int table[MAX], PMAX = 1999993;

int hashv(int x) {
	x = ((x >> 16) ^ x) * 0x45d9f3b;
    x = ((x >> 16) ^ x) * 0x45d9f3b;
    x = ((x >> 16) ^ x);
    return x % PMAX;
}

void add(int val) {
	int h = hashv(val);
	while(table[h]) h++;
	table[h] = val;
}

bool is(int val) {
	int h = hashv(val);
	while(table[h] && table[h] != val) h++;

	if(!table[h])
		return false;
	return true;
}

void del(int val) {
	int h = hashv(val);	
	while(table[h] && table[h] != val) h++;
	if(table[h]) table[h] = -1;	
}

int main () {
	FILE *in = fopen("hashuri.in", "r");
	FILE *out = fopen("hashuri.out", "w");
	
	int n;
	fscanf(in, "%d", &n);
	
	int t, val;
	for(int i = 0; i < n; i++) {
		fscanf(in, "%d %d", &t, &val);

		if(t == 1) {
		 	add(val);
		}
		else if (t == 3) {
			if(is(val)) fprintf(out, "1\n");
			else fprintf(out, "0\n");
		}
		else {
			del(val);
		}
	}
	return 0;
}