Pagini recente » Cod sursa (job #1172430) | Cod sursa (job #1924398) | Cod sursa (job #1625817) | Cod sursa (job #1009055) | Cod sursa (job #1535672)
/*
http://www.infoarena.ro/problema/hashuri
*/
#define INPUT "hashuri.in"
#define OUTPUT "hashuri.out"
#define MAX 1000001
#define MOD 666013
#include <fstream>
#include <iostream>
#include <map>
using namespace std;
struct Node
{
int info;
Node *next;
Node(int data) : info(data), next(nullptr) { }
Node(int data, Node *link) : info(data), next(link) { }
};
int N;
Node *H[MOD];
int Hash(int key)
{
return (key % MOD);
}
bool exists(int key)
{
int code = Hash(key);
for (Node *p = H[code]; p; p = p->next)
{
if (p->info == key)
{
return true;
}
}
return false;
}
void add(int key)
{
if (!exists(key))
{
int code = Hash(key);
if (H[code] == nullptr)
{
H[code] = new Node(key);
}
else
{
Node *p = new Node(key, H[code]);
H[code] = p;
}
}
}
void remove(int key)
{
if (exists(key))
{
int code = Hash(key);
if (H[code]->info == key)
{
Node *p = H[code];
H[code] = H[code]->next;
delete p;
}
else
{
Node *p;
for (p = H[code]; p && p->next->info != key; p = p->next);
if (p)
{
Node *q = p->next;
p->next = q->next;
delete q;
}
}
}
}
int main()
{
int i, op, x;
ofstream fout(OUTPUT);
ifstream fin(INPUT);
fin >> N;
for (i = 0; i < N; ++i)
{
fin >> op >> x;
switch (op)
{
case 1:
add(x);
break;
case 2:
remove(x);
break;
case 3:
fout << exists(x) << "\n";
break;
}
}
fin.close();
fout.close();
for (Node *p = H[1]; p; p = p->next)
{
cout << p->info << " ";
}
return 0;
}