Cod sursa(job #2287512)

Utilizator valorosu_300Cristian Gherman valorosu_300 Data 21 noiembrie 2018 23:06:49
Problema Hashuri Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <fstream>
using namespace std;
ifstream in("hashuri.in");
ofstream out("hashuri.out");
const int MOD = 1000003;

struct node{
    int value;
    node *next;
};
node *h[MOD]; /// hash

void addNode(int pos, int val){
    node *q = new node;
    q->value = val;
    q->next = h[pos];
    h[pos] = q;
}

int convert(int key){
    return key % MOD;
}

bool searchValue(int key, int val){
    ///checks if val already exists in the hash table
    ///0 means that the value wasn't found
    for(node *i = h[key];i;i = i->next)
        if(i->value == val)
            return true;
    return false;
}

void insertValue(int val){
    int key = convert(val);
    bool exists = searchValue(key,val);
    if(exists == 0)
        addNode(key,val);
}

void deleteValue(int val){
    int key = convert(val);
    node *temp = new node;

    if(h[key] == NULL)
        return ;

    if(h[key]->value == val)
        h[key] = h[key]->next;

    else{
        temp = h[key];
        for(node *i = h[key]->next;i;i = i->next){
            if(i->value == val){
                temp->next = i->next;
                delete temp;
                return ;
            }
            temp = i;
        }
    }


}

int main()
{
    int n, q, val;
    in>>n;
    for(int i=1;i<=n;i++){
        in>>q>>val;
        if(q == 1)
            insertValue(val);
        else if(q == 2)
            deleteValue(val);
        else
            out<<searchValue(convert(val),val)<<"\n";
    }
    in.close();
    out.close();
    return 0;
}