Cod sursa(job #730329)

Utilizator andreipasalauPasalau Andrei andreipasalau Data 6 aprilie 2012 08:45:09
Problema Hashuri Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.6 kb
#include <fstream>
#include <iostream>
using namespace std;

ifstream f("hashuri.in");
ofstream g("hashuri.out");


struct lista{
	int numar;
	lista* next;
};

lista *prim[199993];

void adauga(long x){
	int i = x%199993;
	if (prim[i] == NULL){
		prim[i] = new lista;
		prim[i]->numar = x;
		prim[i]->next = NULL;
	}
	else{
		
		lista *l;
		l->next = prim[i];
		l->numar = x;
		prim[i] = l;
/*
		l = prim[i];
		while(l->next != NULL){
			if (l->numar == x)
				return;
			else
				l = l->next;
		}
		if(l->numar == x)
			return;
		lista *p = new lista;
		l->next = p;
		p ->numar = x;
		p->next = NULL;*/
	}
}

void sterge(long x){
	int i = x%199993;
	if (prim[i] == NULL)
		return;
	else{
		lista *l, *p;
		l = prim[i];
		p = prim[i];
		if(prim[i]->numar == x){
			prim[i] = prim[i]->next;
			return;
		}
		while(l->next != NULL){
			if (l->numar == x)
				p ->next = l->next;
			else
			{
				p = l;
				l = l->next;
			}
		}
		if(l->numar == x)
			p->next = NULL;
	}
}

int returneaza(long x){
	int i = x%199993;
	if (prim[i] == NULL)
		return 0;
	else{
		lista *l;
		l = prim[i];
		if(prim[i]->numar == x){
			return 1;
		}
		while(l->next != NULL){
			if (l->numar == x)
				return 1;
			else
				l = l->next;
		}
		if(l->numar == x)
			return 1;
	return 0;
	}
}
int main(){
	int n;
	int op;
	prim[20000] = {NULL};
	long x;
	f >> n;
	for(int i = 0; i < n; i++)
	{
		f >> op;
		f >> x;
		if(op == 1)
			adauga(x);
		else if(op == 2)
			sterge(x);
		else
			g << returneaza(x) << "\n";
	}
	f.close();
	g.close();
	return 0;
}