Cod sursa(job #710725)

Utilizator mihaibogdan10Mihai Bogdan mihaibogdan10 Data 10 martie 2012 17:13:53
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<cstdio>
using namespace std;

const int M = 666013; int H[M];

int h(int x, int i){
	return (x % M + i * (1 + x % (M - 1))) % M;
}

int Cauta(int x){
	int i, ind;
	for (i = 0; i < M; i++){
		ind = h(x, i);
		if (H[ind] <= 0) return -1;
		if (H[ind] == x) return ind;
	}
}

void Insereaza(int x){
	int i, ind;
	if (Cauta(x) == -1)
		for (i = 0; i < M; i++){
			ind = h(x, i);
			if (H[ind] <= 0) H[ind] = x, i = M;
		}
}

void Sterge(int x){
	int ind = Cauta(x);
	if (ind != -1) H[ind] = -1;
}

int main(){
	freopen ("hashuri.in", "r", stdin), freopen("hashuri.out", "w", stdout);
	
	int i, n, x, op;
	scanf("%d", &n);
	for (i = 0; i < n; i++){
		scanf("%d %d", &op, &x);
		if (op == 1) Insereaza(x);
		if (op == 2) Sterge(x);
		if (op == 3) printf("%d\n", Cauta(x) == -1 ? 0 : 1);
	}
	return 0;
}