cpp-012Đọc toàn bộ đề miễn phí

Đế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).

C++Trung bình25 phút

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ủ đề

mapunordered maptwo sumfrequencyoverflow prevention

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 int 32-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 stdin và in ra stdout. 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ào stdout và 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 4

Output

6

Giả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.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.