Cod sursa(job #1844644)

Utilizator wilson182Alexandrina Panfil wilson182 Data 10 ianuarie 2017 11:16:44
Problema Hashuri Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<bits/stdc++.h>
using namespace std;
struct nod{
	int val;
	nod *last, *next;
	nod(){
		val=0;
		last=next=NULL;
	}
};
nod *h[333014];
void add(nod* &a, int val){
	if(a==NULL){
		a=new nod;
		a->val=val;
		return;
	}
	nod* it=a;
	nod* b=new nod;
	for(; it->next; it=it->next) if (it->val==val) return;
	it->next=b;
	b->last=it;
	b->val=val;
}
void remove(nod* &a, int val){
	if(a==NULL) return;
	if (a->val==val)
	{
	 a=a->next;
	 return;
	}
	if(a==NULL)return;
	nod* it=a;
	for(;it->next; it=it->next) 
	  if (it->val==val) {
	  	nod *u=it->last, *p=it->next;
	  	u->next=p;
	  	p->last=u;
	  	delete it;
	  	return;
	  }
}
int caut(nod* &a, int val){
	nod* it=a;
	if(it==NULL) return 0;
	if(a->val==val)return 1;
	for(;it->next; it=it->next) 
	  if (it->val==val) return 1;
	return 0;
}
int main(){
	freopen("hashuri.in", "r", stdin);
	freopen("hashuri.out", "w", stdout);
	int n, x, y, i;
	scanf("%d", &n);
	for(i=0; i<=333013; i++) h[i]=NULL;
	while(n--){
		scanf("%d%d", &x, &y);
		if(x==1) {
			add(h[y%7], y); 
			continue;
		}
		if(x==2) remove(h[y%7], y); 
		if(x==3) printf("%d\n",caut(h[y%7], y));
	}
	return 0;
}