Cod sursa(job #2942595)

Utilizator george_buzasGeorge Buzas george_buzas Data 19 noiembrie 2022 21:44:26
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.71 kb
#include <fstream>
#include <map>
#include <vector>
#define MODULO 250000
using namespace std;

class HashMap {
private:
	vector<int> hash_map[MODULO];

public:
	int get_key(int value) {
		return value % MODULO;
	}

	bool key_exists(int key) {
		return hash_map[key].size() != 0;
	}

	int get_nr_mapped_values(int key) {
		return hash_map[key].size();
	}

	void insert_element(int number) {
		if (find_element(number).first) {
			return;
		}
		int key = get_key(number);
		hash_map[key].push_back(number);
	}

	void delete_element(int number) {
		pair<int, int> element_information = find_element(number);
		if (element_information.first) {
			int key = get_key(number);
			hash_map[key].erase(hash_map[key].begin() + element_information.second);
		}
	}

	/*
	* Returns 1 if element is found, 0 otherwise.
	* If the element is found, then the position of the element is also returned, otherwise -1 is returned;
	*/
	pair<int, int> find_element(int number) {
		int key = get_key(number);
		if (key_exists(key)) {
			int nr_mapped_values = get_nr_mapped_values(key);
			for (int i = 0; i < nr_mapped_values; ++i) {
				if (hash_map[key][i] == number) {
					return { 1, i };
				}
			}
		}
		return { 0, -1 };
	}
};

HashMap hash_map;

int main() {
	ifstream fin("hashuri.in");
	ofstream fout("hashuri.out");
	int nr_operations, operation_type, number;
	fin >> nr_operations;
	for (int i = 0; i < nr_operations; ++i) {
		fin >> operation_type >> number;
		if (operation_type == 1) {
			hash_map.insert_element(number);
		} else if (operation_type == 2) {
			hash_map.delete_element(number);
		} else {
			fout << hash_map.find_element(number).first << '\n';
		}
	}
	return 0;
}