Cod sursa(job #1405249)

Utilizator dan.ghitaDan Ghita dan.ghita Data 28 martie 2015 23:14:41
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.59 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("hashuri.in");
ofstream g("hashuri.out");

class Node {
public:
    int value;
    Node *next;
    Node(int x = 0) : value(x), next(NULL){}
    static void add(int, Node *&);
    static void del(int, Node *&);
    static bool findInHash(int, Node *);
};

void Node::add(int x, Node * &node){

    if(!node)
        node = new Node(x);
    else
        if(node->value != x)
            add(x, node->next);
}

void Node::del(int x, Node * &node){

    if(!node)
        return;
    else {
        if(node->value == x){
            node = node->next;
            return;
        }

        Node *prev, *cur;

        prev = node;
        cur = node->next;

        while(cur){
            if(cur -> value == x){
                prev->next = cur -> next,
                delete cur;
                return;
            }
            prev = prev -> next;
            cur = cur -> next;
        }
    }
}

bool Node::findInHash(int x, Node * node){

    while(node){
        if(node -> value == x)
            return true;
        node = node->next;
    }
    return false;
}

int main()
{
    int n, x, type;

    Node* h[666013] ;
    for(int i = 0; i < 666013; ++i)
        h[i] = NULL;


    f>>n;

    while(n--){
        f>>type>>x;
        switch(type){
            case 1:
                Node::add(x, h[x % 666013]);
                break;
            case 2:
                Node::del(x, h[x % 666013]);
                break;

            case 3:
                g<<Node::findInHash(x, h[x % 666013])<<'\n';
                break;


        }


    }




    return 0;
}