Cod sursa(job #2088163)

Utilizator ruxandramateiMatei Ruxandra ruxandramatei Data 14 decembrie 2017 20:15:31
Problema Hashuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.88 kb
#include <iostream>
#include <fstream>
#include <cstring>
#define DMAX 1048575

using namespace std;

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

typedef struct elem{
    int val;
    elem * urm;
}NOD;

NOD * A[DMAX];
int optiune, valoare;
int nrOptiuni;

int cheie(int valoare){
    int chei = valoare % DMAX;
    return chei;
}

void inserare(int valoare){
    int pozitie = cheie(valoare);
    elem * deAdaugat = new elem;
    deAdaugat -> val = valoare;
    deAdaugat -> urm = A[pozitie];
    A[pozitie] = deAdaugat;
}

void stergere(int valoare){
    int pozitie = cheie(valoare);
    elem * deSters ;
    //daca elementul se afla primul in lista, il stergem;
    if(A[pozitie] -> val == valoare){
        deSters = A[pozitie];
        A[pozitie] = A[pozitie] -> urm;
        delete deSters;
    }else{
        elem * parcurg = A[pozitie];
        while(parcurg != NULL && parcurg -> urm -> val != valoare){
            parcurg = parcurg -> urm;
        }
        deSters = parcurg -> urm;
        if(parcurg != NULL ){
            parcurg -> urm = parcurg -> urm -> urm;
        }
        delete deSters;
    }
}

bool cautareElement(int valoare){
    int pozitie = cheie(valoare);
    if(A[pozitie] == NULL ){
        return false;
    }else{
        elem * parcurg = A[pozitie];
        while(parcurg -> val != valoare && parcurg != NULL){
            parcurg = parcurg -> urm;
        }
        if(parcurg == NULL){
            return false;
        }else{
            return true;
        }
    }
}

void citire(){
    in >> optiune >> valoare;
}

void rezolvare(){
    if(optiune == 1){
        inserare(valoare);
    }else if(optiune == 2){
        stergere(valoare);
    } else{
        out << cautareElement(valoare) << '\n';
    }
}

int main() {
    in >> nrOptiuni;
    for(int i = 1; i<= nrOptiuni; i++){
        citire();
        rezolvare();
    }
    in.close();
    out.close();
    return 0;
}