模擬雜湊表 雜湊

2021-10-02 17:18:21 字數 1534 閱讀 9978

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

「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 通過雜湊演算法變換成固定長度的輸...