Đếm số cặp có tổng bằng S bằng Bảng băm
Hệ thống cân bằng tải truyền thông của AI Empire Academy tiếp nhận N gói tín hiệu với cường độ A1, A2, …, AN (1 ≤ N ≤ 105, -109 ≤ Ai ≤ 109).
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: std map, loops, data types.
Nội dung đề bài
Mục tiêu kiến thức
- Áp dụng cấu trúc ánh xạ
std::mapđể đếm tần suất các giá trị số nguyên lớn trong thời gian O(N log N). - Kỹ thuật quét một lượt (One-pass Counting) để đếm số cặp thỏa mãn điều kiện mà không cần xét lại.
- Tránh hiện tượng tràn số nguyên khi tổng số cặp có thể đạt tới N(N-1)2 ≈ 5 · 109 (vượt quá kiểu
int32-bit).
Mô tả bài toán
Hệ thống cân bằng tải truyền thông của AI Empire Academy tiếp nhận N gói tín hiệu với cường độ A1, A2, …, AN (1 ≤ N ≤ 105, -109 ≤ Ai ≤ 109).
Một cặp tín hiệu (i, j) được gọi là tương thích nếu:
- 1 ≤ i < j ≤ N (hai gói tín hiệu ở vị trí khác nhau).
- Tổng cường độ của chúng bằng đúng một giá trị mục tiêu S: Ai + Aj = S.
Bạn hãy viết chương trình đếm xem có tổng cộng bao nhiêu cặp chỉ số (i, j) tương thích.
Quy ước nộp bài
- Chỉ cần viết một chương trình đọc
stdinvà in rastdout. Bài này không yêu cầu viết hàm. - Không dùng
coutđể in lời nhắc trước khi đọc dữ liệu. Lời nhắc sẽ lọt vàostdoutvà làm bài sai. - Chỉ in đúng nội dung ở mục Output. Không in thêm nhãn, dòng trống hay ký tự thừa.
- Output được so khớp từng ký tự, phân biệt chữ hoa/thường và dấu câu.
Input
- Dòng 1: Gồm 2 số nguyên N và S (1 ≤ N ≤ 105, -2 · 109 ≤ S ≤ 2 · 109).
- Dòng 2: Gồm N số nguyên A1, A2, …, AN cách nhau bởi dấu cách (-109 ≤ Ai ≤ 109).
Output
In ra một số nguyên duy nhất là tổng số cặp (i, j) thỏa mãn điều kiện.
Ràng buộc
- 1 ≤ N ≤ 105.
- -109 ≤ Ai ≤ 109.
- -2 · 109 ≤ S ≤ 2 · 109.
- Thời gian chạy: 1000ms.
- Bộ nhớ tối đa: 256MB.
Ví dụ 1
Input
6 8
3 5 3 5 5 4Output
6Giải thích
Mảng A = [3, 5, 3, 5, 5, 4] có:
- Hai phần tử giá trị 3 (ở chỉ số 1, 3).
- Ba phần tử giá trị 5 (ở chỉ số 2, 4, 5).
Mỗi phần tử 3 ghép với một phần tử 5 sẽ có tổng 3 + 5 = 8. Số cặp là: 2 × 3 = 6 cặp.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
