Bài toán: Bảng hash p bucket (0..p-1). Hash function h(k) = k % p. Chèn lần lượt X[i]. Bucket chỉ chứa 1 phần tử. Trả về chỉ số i đầu tiên gây va chạm, hoặc -1.
Code C++
#include <bits/stdc++.h>
using namespace std;
int solve(int p, vector<int> X) {
vector<int> bucket(p, 0);
for (int i = 0; i < (int)X.size(); i++) {
int idx = X[i] % p;
if (bucket[idx]) return i; // va cham
bucket[idx] = 1;
}
return -1;
}
int main() {
int p = 10;
vector<int> X = {0, 21, 53, 41, 53};
cout << solve(p, X) << endl; // 3 (X[3]=41, 41%10=1, bucket[1] đã có 21)
return 0;
}
Kết quả
3