Cod sursa(job #1926072)

Utilizator Horia14Horia Banciu Horia14 Data 13 martie 2017 22:34:56
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include<cstdio>
const int MOD = 666013;
using namespace std;

struct lista
{
    int val;
    lista *next;
};

lista *Hash[MOD];

inline int h(int k)
{
    return k % MOD;
}

int Search(int k)
{
    lista *l = Hash[h(k)];
    while(l != NULL && l->val != k)
        l = l->next;
    if(l == NULL)
        return 0;
    return 1;
}

void Insert(int k)
{
    lista *elem = new lista;
    elem->val = k;
    elem->next = Hash[h(k)];
    Hash[h(k)] = elem;
}

void Delete(int k)
{
    lista *l = Hash[h(k)];
    if(l->val == k)
        Hash[h(k)] = l->next;
    else
    {
        while(l->next->val != k)
            l = l->next;
        l->next = l->next->next;
    }
}

int main()
{
    int x, op, i, n;
    FILE *fin, *fout;
    fin = fopen("hashuri.in","r");
    fout = fopen("hashuri.out","w");
    fscanf(fin,"%d",&n);
    for(i=1; i<=n; i++)
    {
        fscanf(fin,"%d%d",&op,&x);
        if(op == 1)
        {
            if(!Search(x))
                Insert(x);
        }
        if(op == 2)
        {
            if(Search(x))
                Delete(x);
        }
        if(op == 3)
        {
            if(Search(x))
                fprintf(fout,"1\n");
            else fprintf(fout,"0\n");
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}