Đếm tập con tổng X
Xem dưới dạng PDF
Gửi bài giải
Điểm:
30
Giới hạn thời gian:
2.0s
Giới hạn bộ nhớ:
256M
đầu vào:
stdin
Đầu ra:
stdout
Kiểu bài tập
Cho mảng A gồm N số nguyên dương. Hãy đếm số lượng tập con có tổng đúng bằng X. (\(Tập rỗng có tổng bằng 0 — tính nếu X = 0.\))
Với \(N \le 40\), duyệt toàn bộ \(2^N\) tập con là quá chậm. Sử dụng Meet in the Middle:
- Chia mảng làm 2 nửa, sinh tất cả tổng tập con của mỗi nửa và đếm tần số bằng hash map.
- Với mỗi tổng s ở nửa thứ nhất, tra hash map ở nửa thứ hai với key X - s.
Đầu vào
- Dòng đầu tiên chứa hai số nguyên N (\(1 \le N \le 40\)) và X (\(1 \le X \le 10^18\)).
- Dòng thứ hai chứa N số nguyên dương \(A_i\) (\(1 \le A_i \le 10^15\)).
Đầu ra
Số lượng tập con có tổng đúng bằng X.
Ví dụ
Input:
6 26
2 3 5 8 13 21
Output:
4
Giải thích
4 tập con: {2,3,21}, {5,21}, {5,8,13}, {2,3,8,13}.
Ràng buộc & Subtasks
| Subtask | Điểm | Ràng buộc |
|---|---|---|
| 1 | 30% | Tương ứng với các bộ test có kích thước nhỏ |
| 2 | 70% | Không có ràng buộc gì thêm ngoài định dạng đầu vào |
Nhận xét