Cod sursa(job #703848)

Utilizator xulescuStefu Gabriel xulescu Data 2 martie 2012 14:56:37
Problema Hashuri Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <cstdio>

int n;

typedef struct list{
    list *next;
    long v;
} list;

list *tbl[999983];

long hash(long val){
    return val % 999983;
}

void insert(long val){
    long key = hash(val);
    list *p = new list;
    p->v = val;
    p->next = tbl[key];
    tbl[key] = p;
}

void del(long val){
    long key = hash(val);
    if(!tbl[key]) return;
    list *p = tbl[key], *q;
    if(p->v == val){
        tbl[key] = p->next;
        delete p;
        return;
    }
    while(p){
        q = p;
        p = p->next;
        if(p->v == val){
            q->next = p->next;
            delete p;
            return;
        }
    }
}

bool lookup(long val){
    long key = hash(val);
    list *p = tbl[key];
    while(p){
        if(p->v == val) return 1;
        p = p->next;
    }
    return 0;
}

int main(){
    FILE *f = fopen("hashuri.in", "r");
    FILE *g = fopen("hashuri.out", "w");
    fscanf(f, "%d", &n);
    int op; long val;
    for(int i=0; i<n; i++){
        fscanf(f, "%d %d", &op, &val);
        switch(op){
            case 1:
                insert(val);
                break;
            case 2:
                del(val);
                break;
            case 3:
                int r = lookup(val);
                fprintf(g, "%d\n", r);
                break;
        }
    }
    return 0;
    fclose(f);
    fclose(g);
}