Cod sursa(job #611871)

Utilizator andreioneaAndrei Onea andreionea Data 4 septembrie 2011 02:30:40
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include<fstream>
#include<cstring>
#include<cstdlib>
#define MODULO 66613
#define HASH(x) (x)%MODULO
#define infile "hashuri.in"
#define outfile "hashuri.out"
typedef struct NODE{
		struct NODE *next;
		int data;
	}NODE;
void add(NODE *x, int number)
{
	NODE *a = x;
	while(a->next){
		if(a->next->data == number)
			return;
	}
	NODE *newNode = (NODE*)malloc(sizeof(NODE));
	newNode->next = NULL;
	newNode->data = number;
	a->next = newNode;
}	
void rem(NODE *x, int number)
{
	NODE *a = x;
	NODE *b;
	while(a->next){
		if(a->next->data == number){
			b = a->next;
			a->next = a->next->next;
			free(b);
		}
	}
}
int exists(NODE *x, int number)
{
	NODE *a = x;
	while(a->next){
		if(a->next->data == number)
			return 1;
	}
	return 0;
}
int main()
{
	NODE *table[MODULO];
	int i;
	int N;
	std::ifstream fin(infile);
	std::ofstream fout(outfile);
	for(i = 0; i<MODULO; ++i){
		table[i] = (NODE*)malloc(sizeof(NODE));
		table[i]->next = NULL;
	}
	fin>>N;
	for(i = 0; i<N; ++i){
		int op, nr;
		fin>>op>>nr;
		switch(op){
		case 1:
			add(table[HASH(nr)], nr);
			break;
		case 2:
			rem(table[HASH(nr)], nr);
			break;
		case 3:
			fout<<exists(table[HASH(nr)], nr)<<std::endl;
			break;
		default:
			return 1;
		}
	}
	fin.close();
	fout.close();
	return 0;
}