演算法(模擬雜湊表)

2021-10-23 23:16:28 字數 1567 閱讀 1576

時間複雜度:o(1)

維護乙個集合,支援如下幾種操作:

「i x」,插入乙個數x;

「q x」,詢問數x是否在集合**現過;

現在要進行n次操作,對於每個詢問操作輸出對應的結果。

輸入格式

第一行包含整數n,表示運算元量。

接下來n行,每行包含乙個操作指令,操作指令為」i x」,」q x」中的一種。

輸出格式

對於每個詢問指令「q x」,輸出乙個詢問結果,如果x在集合**現過,則輸出「yes」,否則輸出「no」。

每個結果佔一行。

資料範圍

1≤n≤105

−109≤x≤109

輸入樣例:

5i 1

i 2i 3

q 2q 5

輸出樣例:

yesno

首先尋找n取質數

//尋找 大於10萬的第乙個質數

for(

int i=

100000

;;i++)if

(flag)

}//得到100003,所以n=100003

**

對映到0-1e5之間

開陣列時開大一點,一般2~3倍, 先找到大於20萬的最小質數

//尋找 大於20萬的第乙個質數

for(

int i=

200000

;;i++)if

(flag)

}//得到200003,所以n=100003

#include

#include

using

namespace std;

const

int n=

100003

,null=

0x3f3f3f3f

;//用資料範圍之外的數表示這個位置沒有數,

int h[n]

;int

find

(int x)

return k;

}int

main()

}return0;

}

AcWing 模擬雜湊表 雜湊表 模擬

時 空限制 1s 64mb 維護乙個集合,支援如下幾種操作 i x 插入乙個數x q x 詢問數x是否在集合 現過 現在要進行n次操作,對於每個詢問操作輸出對應的結果。第一行包含整數n,表示運算元量。接下來n行,每行包含乙個操作指令,操作指令為 i x q x 中的一種。對於每個詢問指令 q x 輸...

模擬雜湊表 雜湊

維護乙個集合,支援如下幾種操作 i x 插入乙個數x q x 詢問數x是否在集合 現過 現在要進行n次操作,對於每個詢問操作輸出對應的結果。輸入格式 第一行包含整數n,表示運算元量。接下來n行,每行包含乙個操作指令,操作指令為 i x q x 中的一種。輸出格式 對於每個詢問指令 q x 輸出乙個詢...

演算法 模擬雜湊表(雜湊拉鍊法,開放選址法)

用陣列h n 來表示拉鍊法上對應的鏈,如果遇到衝突則在對應衝突的位置開乙個鏈,建立鏈的方式和之前單鏈表的方式相同。如果要插入乙個值 計算當前值在雜湊之後的對映位置int k x n n n 之所以要取兩次模,是為了處理負數的模 將x儲存在e idx 中 該鍊錶的下乙個位置就是當前衝突位置的鍊錶的頭,...