Cod sursa(job #381758)

Utilizator devilkindSavin Tiberiu devilkind Data 11 ianuarie 2010 15:26:10
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define NMAX 1000000
#define HMAX 2000000

int H[HMAX];
int A[1000];
int B[1000];
int C[1000];
int N;

int main() {
    freopen("hashuri.in", "r", stdin);
    freopen("hashuri.out", "w", stdout);

    scanf("%d ", &N);
    srand(time(0));

    int i;
    for (i = 1; i < 1000; i++) {
        A[i] = rand() % 100000;
        B[i] = rand() % 100000;
        C[i] = rand() % 100000;
    }

    for (i = 1; i <= N; i++) {
        int op, v;
        scanf("%d %d ", &op, &v);
        int x1 = v % 1000, x2 = (v / 1000) % 1000, x3 = v / 1000000;
        int hval = A[x1] ^ B[x2] ^ C[x3];
        bool is_in = false;

        if (op == 1) {
            for (; H[hval] > 0; hval++) {
                if (H[hval] == v) {
                    is_in = true;
                    break;
                }
            }

            if (!is_in) {
                H[hval] = v;
            }
        } else if (op == 2) {
             for (; H[hval] > 0; hval++) {
                if (H[hval] == v) {
                    H[hval] = 0;
                    break;
                }
            }

            for (; H[hval + 1] > 0; hval++) {
                H[hval] = H[hval + 1];
            }
            H[hval] = 0;
        } else {
            for (; H[hval] > 0; hval++) {
                if (H[hval] == v) {
                    is_in = true;
                }
            }
            if (is_in) {
                printf("1\n");
            } else {
                printf("0\n");
            }
        }
    }

    return 0;
}