Cod sursa(job #3128888)

Utilizator TirilaPatricTirila Patric-Gabriel TirilaPatric Data 11 mai 2023 12:41:09
Problema Hashuri Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.91 kb
#include <iostream>
#include <vector>
#include <list>
#include <fstream>
using namespace std;

int p = 666013;

class HashTable{
    vector<vector<int>> v;
    int findVal(int, int);
public:
    HashTable();
    void insert(int);
    void del(int);
    int find(int);
    friend ostream& operator<<(ostream& out, const HashTable& ht);
};
//ostream& operator<<(ostream& out, const HashTable& ht){
//    cout<<"AFISARE HASHTABLE: "<<endl;
//    for(int i = 1; i<ht.v.size(); i++){
//        list<int>::iterator j;
//        for(j = ht.v[i].begin(); j != ht.v[i].end(); j++){
//            cout<<*j<<" ";
//        }
//        cout<<endl;
//    }
//    cout<<"==================="<<endl;
//    return out;
//}
HashTable::HashTable(){
    this->v.resize(666013);
}
int HashTable::findVal(int val, int pos){
    if(!this->v[pos].empty()){
        int i;
        int k = 0;
        for(i = 0; i < this->v[pos].size(); i++){
            if(this->v[pos][i]==val) return k;
            k+=1;
        }
    }
    return -1;
}
int HashTable::find(int val){
    int k = val%p;
    if(findVal(val, k) == -1) return 0;
    return 1;
}
void HashTable::insert(int val){
    int k = val%p;
    if(findVal(val, k) == -1){
        this->v[k].push_back(val);
    }
}
void HashTable::del(int val){
    int k = val%p, l = findVal(val, k);
    if(l != -1){
        this->v[k].erase(this->v[k].begin() + l);
    }
}
int main(){
    ifstream f("hashuri.in");
    ofstream g("hashuri.out");
    int n, a, b;
    f>>n;
    HashTable ht;
    while(n>0){
        f>>a>>b;
        cout<<"N: "<<n<<endl;
        switch(a){
            case 1: {
                ht.insert(b);
                break;
            }
            case 2: {
                ht.del(b);
                break;
            }
            case 3: {
                g<<ht.find(b)<<endl;
                break;
            }
            default: {
                break;
            }
        }
        n--;
    }
}