維護乙個集合,支援如下幾種操作:
「i x」,插入乙個數x;
「q x」,詢問數x是否在集合**現過;
現在要進行n次操作,對於每個詢問操作輸出對應的結果。
輸入格式
第一行包含整數n,表示運算元量。接下來n行,每行包含乙個操作指令,操作指令為」i x」,」q x」中的一種。
輸出格式
對於每個詢問指令「q x」,輸出乙個詢問結果,如果x在集合**現過,則輸出「yes」,否則輸出「no」。
每個結果佔一行。
資料範圍
1≤n≤10^5
−10 ^ 9≤x≤10 ^ 9
輸入樣例:
5i 1
i 2i 3
q 2q 5
輸出樣例:
yesno
這個題有很多方式可以做,可以用雜湊,也可以用c++的stl
雜湊開放定址法
首先陣列要開到題目要求的兩倍,並且還要是乙個質數,因為題目中的資料範圍是-10 ^ 9到10 ^9次方,所以,可以找乙個不是這個區間的數字作為標記,代表這個位置上沒有存放數字,這裡用的是0x3f3f3f3f。
#include
#include
using
namespace std;
int aa[
200003];
const
int mod=
200003
;const
int off=
0x3f3f3f3f
;int
find
(int a)
return x;
}//如果陣列中已經有a就返回a所在的陣列下標,如果沒有就返回a應該在那個位置上
intmain()
}return0;
}
拉鍊法
拉鍊法就是在陣列每個位置上延申出一條鏈,有點類似於存圖時用的鄰接表
#include
#include
using
namespace std;
const
int n=
100003
;int h[n]
,e[n]
,ne[n]
,idx;
void
add(
int x)
intfind
(int x)
return0;
}int
main()
}return0;
}
c++ stl
這個題如果用stl的話,可以用set,map。這些都是可以做出來的
#include
#include
#include
using
namespace std;
set<
int> st;
intmain()
}return0;
}
AcWing 模擬雜湊表 雜湊表 模擬
時 空限制 1s 64mb 維護乙個集合,支援如下幾種操作 i x 插入乙個數x q x 詢問數x是否在集合 現過 現在要進行n次操作,對於每個詢問操作輸出對應的結果。第一行包含整數n,表示運算元量。接下來n行,每行包含乙個操作指令,操作指令為 i x q x 中的一種。對於每個詢問指令 q x 輸...
演算法(模擬雜湊表)
時間複雜度 o 1 維護乙個集合,支援如下幾種操作 i x 插入乙個數x q x 詢問數x是否在集合 現過 現在要進行n次操作,對於每個詢問操作輸出對應的結果。輸入格式 第一行包含整數n,表示運算元量。接下來n行,每行包含乙個操作指令,操作指令為 i x q x 中的一種。輸出格式 對於每個詢問指令...
模擬雜湊表(也稱雜湊表)過程分享
模擬雜湊表過程分享 從這篇部落格開始我會將在部落格裡分享我在acwing社群學習和刷題的過程,有任何問題希望能多多指正。以下是acwing社群主頁 acwing社群主頁 hash,一般翻譯做雜湊 雜湊,或音譯為雜湊,是把任意長度的輸入 又叫做預對映pre image 通過雜湊演算法變換成固定長度的輸...