Cod sursa(job #3140933)

Utilizator speedy_gonzalesDuca Ovidiu speedy_gonzales Data 11 iulie 2023 09:23:18
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.19 kb
#include <iostream>
#include <vector>
#include <map>
#include <cstring>
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include <queue>
#include <cmath>
#include <set>
#include <unordered_map>
#include <stack>
#include <iomanip>
#include <random>
#include <climits>

using namespace std;

ifstream fin("hashuri.in");
ofstream fout("hashuri.out");

const int MOD = 700001;

struct Node {
    long long value;
    Node *next;
};

Node *listNode[MOD];

long long hashValue(long long value) {
    return value % MOD;
}

long long searchElement(long long value) {
    long long index = hashValue(value);

    Node *currentNode = listNode[index];
    while (currentNode != NULL) {
        if (currentNode->value == value) {
            return 1;
        }
        currentNode = currentNode->next;
    }

    return 0;
}

void insert(long long value) {
    if (searchElement(value) == 1) {
        return;
    }
    long long index = hashValue(value);
    Node *newNode = new Node();
    newNode->value = value;
    newNode->next = listNode[index];

    listNode[index] = newNode;
}

void deleteElement(long long value) {
    long long indexHash = hashValue(value);

    Node *currentNode = listNode[indexHash];
    Node *prevNode = NULL;

    long long index = 0, foundAt = -1;
    while (currentNode != NULL) {
        if (currentNode->value == value) {
            foundAt = index;
            break;
        }
        ++index;
        prevNode = currentNode;
        currentNode = currentNode->next;
    }
    if (foundAt == -1) {
        return;
    }

    if (prevNode == NULL) {
        listNode[indexHash] = currentNode->next;
    } else {
        prevNode->next = currentNode->next;
    }

    delete currentNode;
}

int main() {
    long long n;

    fin >> n;

    for (long long i = 0; i < MOD; ++i) {
        listNode[i] = NULL;
    }

    for (long long i = 0; i < n; ++i) {
        long long type;
        long long value;
        fin >> type >> value;

        if (type == 1) {
            insert(value);
        } else if (type == 2) {
            deleteElement(value);
        } else if (type == 3) {
            fout << searchElement(value);
            fout << "\n";
        }
    }

    return 0;
}