1. 程式人生 > >演算法訓練--數字盒子

演算法訓練--數字盒子

/*
題目:對於一個盒子S,要求進行插入以及刪除操作,輸出是否操作成功 數字的範圍:10^5(60%)~10^18
*/
#include <bits/stdc++.h>
using namespace std;
//Mod:雜湊函式的模數
//table:雜湊表
const int Mod = 1000003;
vector<ll> table[Mod];
typedef long long ll;
//這是一個雜湊表
int Hash(ll x) {
return x % Mod;
}
bool check(int op,ll x){
int h = Hash(x);//求出x的雜湊值
//在雜湊表中找到x
vector<ll>::iterator ptr = table[h].end();
for(vector<ll>::iterator it = table[h].begin();it != table[h].end();it ++){
if(x == it){
ptr = it;
break;
}
}
if(op == 1){//如果op為1,那麼執行插入操作
if(ptr == table[h].end()){ //什麼情況下能成功插入呢?
table[h].push_back(x);
return 1;
}
return 0;
}else{ //如果op為2,那麼就執行刪除操作
if(ptr != table[h].end()){ //什麼情況下能刪除成功呢?
*ptr = table[h].back();//back:返回當前vector容器中末尾元素的引用。
table[h].pop_back();
return 1;
}
return 0;
}
}