Cod sursa(job #2203970)

Utilizator Steff94Stefan Steff94 Data 13 mai 2018 21:35:14
Problema Hashuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include<iostream>
#include<fstream>
#define prim 100003
using namespace std;

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

struct nod {
	int info;
	nod *next;
};

int exists(nod *p, int info) { 
	nod *q = p;
	while (q != NULL) {
		if (q->info == info)
			return 1;
		q = q->next;
	}
	return 0;
}

void add_nod(nod *&p, nod *&u, int info) {
	if (!exists(p,info)) {
		if (p == NULL) {
			p = new nod;
			p->info = info;
			u = p;
			u->next = NULL;
		}
		else {
			nod *c = new nod;
			c->info = info;
			u->next = c;
			u = c;
			u->next = NULL;
		}
	}
}

void delete_nod(nod *&p, nod *&u, int s) {
	if (p == NULL) return;
	if ((p->next == NULL) && (p->info = s)) {
		delete p;
		p = u = NULL;
		return;
	}
	nod *c = p;
	nod* x = p->next;

	while (x->next != NULL) {
		if (x->info == s)
		{
			c->next = x->next;
			delete x;
			return;
		}
		x = x->next;
		c = c->next;
	}

	if (x->info == s) {
		delete x;
		c->next = NULL;
	}
}

int search_nod(nod *&p, int s) {
	nod *q = p;
	while (q != NULL) {
		if (q->info == s)
			return 1;
		q = q->next;
	}
	return 0;
}

int main()
{
	int nr_op, op, x;
	nod* p[prim],* u[prim];
	for (int i = 0; i < prim; i++) {
		p[i] = u[i] = NULL;
	}

	f >> nr_op;
	while (!f.eof()) {
		f >> op >> x;
		if (op == 1) {
			add_nod(p[x%prim], u[x%prim], x);
		}
		if (op == 2) {
			delete_nod(p[x%prim], u[x%prim], x);
		}
		if (op == 3) {
			g << search_nod(p[x%prim], x) << endl;
		}
	}

	f.close();
	g.close();
	return 0;
}