Cod sursa(job #3155687)

Utilizator rapidu36Victor Manz rapidu36 Data 9 octombrie 2023 12:24:33
Problema Hashuri Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define K 666019
#define N 1000000

typedef struct
{
    int urm;
    int info;
} element;

int lst[K], n_elem;
element v[N+1];

int pozitie_v(int val)
{
    int categorie = val % K;
    int p = lst[categorie];
    while (p != 0)
    {
        if (v[p].info == val)
        {
            return p;
        }
        p = v[p].urm;
    }
    return 0;
}

void adauga(int val)
{
    int categorie = val % K;
    n_elem++;
    v[n_elem].info = val;
    v[n_elem].urm = lst[categorie];
    lst[categorie] = n_elem;
}

void sterge(int p)
{
    int categorie = v[p].info % K;
    int ultimul_categorie = lst[categorie];
    v[p].info = v[ultimul_categorie].info;
    lst[categorie] = v[ultimul_categorie].urm;
}

int main()
{
    FILE *in, *out;
    in = fopen("hashuri.in", "r");
    out = fopen("hashuri.out", "w");
    int n;
    fscanf(in, "%d", &n);
    for (int i = 0; i < n; i++)
    {
        int tip, val;
        fscanf(in, "%d%d", &tip, &val);
        int p = pozitie_v(val);
        if (tip == 1)
        {
            if (p == 0)
            {
                adauga(val);
            }
        }
        else if (tip == 2)
        {
            if (p != 0)
            {
                sterge(p);
            }
        }
        else
        {
            fprintf(out, "%d\n", (int)(p != 0));
        }
    }
    fclose(in);
    fclose(out);
    return 0;
}