Cod sursa(job #1348735)

Utilizator BonCipBonciocat Ciprian Mircea BonCip Data 19 februarie 2015 20:43:25
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
// Acest cod este facut sa fie cat mai scurt, in limita restrictiilor de coding-style. De aceeea el foloseste vector<> si break
#include <stdio.h>
#include <vector>
using namespace std;

vector<int> tab[666013];
inline int H(int k)
{
	return ((long long)(k) * 641 * 641) % 666013;
}

void push(int val)
{
	int h = H(val);
	int flag = 1;
	for (int i = 0; i < tab[h].size(); ++i) {
		if (tab[h][i] == val) {
			flag = 0;
		}
	}
	if (flag) {
		tab[h].push_back(val);
	}
}

void pop(int val)
{
	int h = H(val);
	for (int i = 0; i < tab[h].size(); ++i) {
		if (tab[h][i] == val) {
			tab[h].erase(tab[h].begin() + i);
			break;
		}
	}
}

bool check(int val)
{
	int h = H(val);
	for (int i = 0; i < tab[h].size(); ++i) {
		if (tab[h][i] == val) {
			return 1;
		}
	}
	return 0;
}

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

	int N;
	fscanf(fin, "%d", &N);

	for (int i = 0; i < N; ++i) {
		int op, num;
		fscanf(fin, "%d%d", &op, &num);
		if (op == 1) {
			push(num);
		} else if (op == 2) {
			pop(num);
		} else if (op == 3) {
			fprintf(fout, check(num) ? "1\n" : "0\n");
		}
	}

	fclose(fin);
	fclose(fout);
	return 0;
}