Bảng băm và va chạm
Đề bài
Mô tả
Một bảng băm gồm ô được đánh số từ đến . Mỗi đối tượng có một định danh id duy nhất và một giá trị băm hash nằm trong đoạn .
Khi thêm một đối tượng có giá trị băm vào bảng, ta thử đặt nó vào ô . Nếu ô đã bị chiếm, ta thử ô , rồi , rồi , và cứ thế tiếp tục cho tới khi gặp một ô trống. Đối tượng được đặt vào ô trống đầu tiên tìm được.
Nếu đối tượng cuối cùng được đặt vào ô với , thì đã có đúng lần truy cập vô ích (các lần chạm vào ô đã bị chiếm).
Khi xoá một đối tượng khỏi bảng, ô mà nó đang chiếm trở lại trạng thái trống. Thao tác xoá không tính lần truy cập vô ích nào.
Cho một dãy thao tác thêm và xoá, hãy tính tổng số lần truy cập vô ích. Ban đầu bảng rỗng.
Dữ liệu bảo đảm mọi thao tác thêm đều đặt được đối tượng vào bảng, mọi id của thao tác thêm là phân biệt, và không có thao tác xoá đối tượng không tồn tại.
Dữ liệu vào
- Dòng đầu chứa ba số nguyên , , : kích thước bảng, bước dò tuyến tính và số thao tác.
- dòng tiếp theo, mỗi dòng mô tả một thao tác:
+ id hash— thêm đối tượng có định danhidvà giá trị bămhash.- id— xoá đối tượng có định danhid.
Dữ liệu ra
Một số nguyên duy nhất: tổng số lần truy cập vô ích.
Ràng buộc
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 10 2 7 + 11 0 + 22 2 + 33 6 + 44 0 + 55 0 - 22 + 66 0 |
7 | Đối tượng 11 vào ô 0, 22 vào ô 2, 33 vào ô 6 (chưa có va chạm). Đối tượng 44 xuất phát từ ô 0: các ô 0, 2, 4 lần lượt được thử, ô 0 và 2 đã bị chiếm nên có 2 lần vô ích, 44 vào ô 4. Đối tượng 55 thử 0, 2, 4, 6, 8 và tốn 4 lần vô ích, vào ô 8. Sau khi xoá 22, ô 2 trống trở lại nên đối tượng 66 chỉ tốn 1 lần vô ích (thử ô 0) rồi vào ô 2. Tổng: . |
| 5 1 6 + 123 0 + 234 1 + 345 2 - 234 + 456 0 + 567 0 |
4 | Ba đối tượng đầu vào các ô 0, 1, 2 không va chạm. Xoá 234 giải phóng ô 1. Đối tượng 456 thử ô 0 (đã chiếm) rồi vào ô 1, tốn 1 lần. Đối tượng 567 thử các ô 0, 1, 2 rồi vào ô 3, tốn 3 lần. Tổng: . |
| 2 1 4 + 5 1 + 6 1 - 5 + 7 1 |
1 | Đối tượng 5 vào ô 1. Đối tượng 6 xuất phát từ ô 1, thử ô 1 (đã chiếm) rồi quay vòng về ô 0, tốn 1 lần. Sau khi xoá 5, ô 1 trống nên đối tượng 7 vào thẳng ô 1. |
Bình luận