Sicily 4699. 簡單雜湊
阿新 • • 發佈:2018-12-30
雜湊表的基本操作
書本概念知識
Constraints
Time Limit: 1 secs, Memory Limit: 256 MB
Description
使用線性探測法(Linear Probing)可以解決雜湊中的衝突問題,其基本思想是:設雜湊函式為h(key) = d, 並且假定雜湊的儲存結構是迴圈陣列, 則當衝突發生時, 繼續探測d+1, d+2…, 直到衝突得到解決.
例如, 現有關鍵碼集為 {47,7 ,29,11,16,92,22,8,3},
設:雜湊表表長為m=11;雜湊函式為Hash(key)=key mod 11;採用線性探測法處理衝突。建雜湊表如下:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
22 |
|
47 |
92 |
16 |
3 |
7 |
29 |
8 |
|
現在給定雜湊函式為Hash(key)= key mod m,要求按照上述規則, 使用線性探測法處理衝突.要求建立起相應雜湊表,並按要求列印。
Input
僅有一個測試用例, 第1行為整數n與m(1 <= n, m <= 10000), n代表key的總數, m代表雜湊表的長度, 並且令雜湊函式為: Hash(key) = key mod m .
接下來n行,每行一個整數,代表一個key。Key與key兩兩不相同 ( 0 <= key <= 10, 000)。
Output
輸出建立好的hash表,比如下表
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
22 |
|
47 |
92 |
16 |
3 |
7 |
29 |
8 |
|
應輸出
0#11
1#22
2#NULL
3#47
4#92
5#16
6#3
7#7
8#29
9#8
10#NULL
Sample Input
3 5 1 5 6
Sample Output
0#5 1#1 2#6 3#NULL 4#NULL
Problem Source
test
程式碼
#include<iostream>
using namespace std;
int main(){
int n,m,num,mid,flag=0;
cin>>n>>m;
int arr[m];
for(int i=0;i<m;i++)
arr[i]=-1;
for(int i=0;i<n;i++)
{
cin>>num;
mid=num%m;
while(flag!=1)
{
if(arr[mid%m]!=-1)
{
mid++;
}
else
{
arr[mid%m]=num;
flag=1;
}
}
flag=0;
}
for(int i=0;i<m;i++)
{
if(arr[i]!=-1)
cout<<i<<"#"<<arr[i]<<endl;
else
cout<<i<<"#NULL"<<endl;
}
}