Cod sursa(job #3323878)

Utilizator mihai.25Calin Mihai mihai.25 Data 20 noiembrie 2025 10:37:20
Problema Hashuri Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <stdio.h>

#include <stdlib.h>

const int MAX = 1e6 + 3;

struct lista {

    int k;

    struct lista *next;
};

int exista (struct lista *l, int x) {

    for (struct lista *p = l; p ; p = p->next)
        if (p->k == x)
            return 1;

    return 0;
}

void adaugare (struct lista **l, int x) {

    struct lista *aux = malloc(sizeof(struct lista));

    aux->k = x;

    aux->next = *l;

    *l = aux;
}

void stergere (struct lista **l, int x) {

    struct lista *p = *l;

    if (p->k == x) {

        *l = p->next;

        free(p);

        return;
    }

    for (;p->next->k != x; p = p->next);

    struct lista *out = p->next;

    p->next = out->next;

    free(out);
}

int main() {

    struct lista *H[MAX];

    for (int i = 0; i < MAX; ++i)
        H[i] = NULL;

    FILE *fin, *fout;

    fin = fopen("hashuri.in", "r");

    fout = fopen("hashuri.out", "w");

    int n;

    fscanf(fin, "%d", &n);

    for (int i = 0; i < n; ++i) {

        int op, x;

        fscanf(fin, "%d %d", &op, &x);

        int ind = (x % MAX + MAX) % MAX;

        if (op == 3)
            fprintf(fout, "%d\n", exista(H[ind], x));
        else {

            if (op == 1) {

                if (!exista(H[ind], x))
                    adaugare(&H[ind], x);
            }
            else {

                if (exista(H[ind], x))
                    stergere(&H[ind], x);
            }
        }
    }

    return 0;
}