Cod sursa(job #1835785)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 27 decembrie 2016 13:58:23
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.87 kb
#include <iostream>
#include <fstream>
#define NMAX 13831
#define BUFF_SIZE 65536

using namespace std;

ifstream in("hashuri.in");
ofstream out("hashuri.out");
char buffer[BUFF_SIZE];
int pos = 0;

void Read(int &a)
{
    while (!isdigit(buffer[pos]))
        if (++pos == BUFF_SIZE)
            in.read(buffer, BUFF_SIZE), pos = 0;
    a = 0;
    while (isdigit(buffer[pos]))
    {
            a = a * 10 + buffer[pos] - '0';
        if (++pos == BUFF_SIZE)
            in.read(buffer, BUFF_SIZE), pos = 0;
    }
}

struct node{
    int key;
    node *next;
};

struct _list{
    node *head;
};

_list H[NMAX];

bool _find(_list L, int key)
{
    for (node *p = L.head; p != NULL; p = p->next)
        if (p->key == key)
            return 1;
    return 0;
}

void push(_list &L, int key)
{
    if (!_find(L, key))
    {
        node *p = new node;
        p->key = key;
        p->next = NULL;
        if (L.head == NULL)
            L.head = p;
        else
        {
            p->next = L.head;
            L.head = p;
        }
    }
}

void _delete(_list &L, int key)
{
    if (_find(L, key))
    {
        if (L.head->key == key)
        {
            node *p = L.head;
            L.head = L.head->next;
            delete p;
        }
        else
        {
            node *p;
            for (p = L.head; p->next->key != key; p = p->next);
            node *del = p->next;
            p->next = del->next;
            delete del;
        }
    }
}

int main()
{
    int n, op, key;
    Read(n);
    for (int i = 1; i <= n; i++)
    {
        Read(op), Read(key);
        if (op == 1)
            push(H[key % NMAX], key);
        else if (op == 2)
            _delete(H[key % NMAX], key);
        else
            out << _find(H[key % NMAX], key) << "\n";
    }
    out.close();
    return 0;
}