Pagini recente » Cod sursa (job #3255153) | Cod sursa (job #2166340) | Cod sursa (job #2858828) | Cod sursa (job #2942225) | Cod sursa (job #921657)
Cod sursa(job #921657)
#include<fstream>
#include<cstdio>
#define mod 300007
using namespace std;
#ifndef __LIST__H
#define __LIST__H
template <typename T>class Node {
public:
T value;
Node<T> *next;
Node(){
next=NULL;
}
};
template <typename T>class LinkedList{
private:
Node<T> *pFirst;
public:
//Constructor
LinkedList(){
pFirst=NULL;
}
//Destructor
~LinkedList(){
while(!isEmpty())
removeFirst();
delete pFirst;
}
/*Adauga un nod cu valoarea == value la inceputul listei */
void addFirst(T value){
Node<T> *p=new Node<T>;
p->value=value;
p->next=pFirst;
pFirst=p;
}
/*Adauga un nod cu valoarea == value la sfarsitul listei */
/*Elimina elementul de la inceputul listei si intoarce valoarea acestuia*/
T removeFirst(){
Node<T> *p=new Node<T>;
T aux;
aux=pFirst->value;
p=pFirst->next;
delete pFirst;
pFirst=p;
return aux;
}
/*Elimina elementul de la sfarsitul listei listei si intoarce valoarea acestuia*/
/*Elimina prima aparitie a elementului care are valoarea == value*/
T removeFirstOccurrence(T value){
Node<T> *p=new Node<T>, *q=new Node<T>;
T aux;
p=pFirst;
while(p){
if(p->value==value) break;
q=p;
p=p->next;
}
if(p==NULL) return 0;
if(p==pFirst) removeFirst();
else{
aux=p->value;
q->next=p->next;
delete p;
}
return aux;
}
/*Elimina ultima aparitie a elementului care are valoarea == value*/
/*Intoarce prima aparitie a elementului care are valoarea == value, NULL daca nu exista*/
Node<T>* findFirstOccurrence(T value){
Node<T> *p=new Node<T>;
p=pFirst;
for(;p;p=p->next)
if(p->value==value)
return p;
return NULL;
}
/*Intoarce ultima aparitie a elementului care are valoarea == value, NULL daca nu exista*/
/*Intoarce 1 daca lista este vida, 0 altfel*/
int isEmpty(){
return (pFirst==NULL);
}
};
#endif
LinkedList<int>v[mod];
int main(){
int k,x,n;
ifstream f;
f.open("hashuri.in");
freopen("hashuri.out","w",stdout);
f>>n;
for(int i=1;i<=n;++i){
f>>k>>x;
switch(k){
case 1: v[x%mod].addFirst(x); break;
case 2: v[x%mod].removeFirstOccurrence(x);break;
case 3: printf("%d\n",v[x%mod].findFirstOccurrence(x)!=NULL?1:0);break;
}
}
f.close();
return 0;
}