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

Phần tử xuất hiện nhiều nhất và lọc số dương

Hệ thống cảm biến phân tích hiệu năng của AI Empire thu thập một chuỗi gồm N số nguyên đo lường A1, A2, …, AN (1 ≤ N ≤ 105, -109 ≤ Ai ≤ 109).

C++Trung bình35 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ủ đề

arraysvectorssortingfrequency

Kiến thức tiên quyết: arrays, std vector, std sort.

Nội dung đề bài

Mục tiêu kiến thức

  • Quản lý mảng dữ liệu số lượng lớn với std::vector trong C++.
  • Đếm tần suất xuất hiện của các phần tử bằng kỹ thuật sắp xếp O(N log N).
  • Xử lý bài toán hòa điểm (tie-breaker): nếu nhiều phần tử có cùng tần suất lớn nhất, chọn phần tử có giá trị nhỏ nhất.
  • Lọc các số dương duy nhất và bảo toàn thứ tự xuất hiện lần đầu trong mảng ban đầu.

Mô tả bài toán

Hệ thống cảm biến phân tích hiệu năng của AI Empire thu thập một chuỗi gồm N số nguyên đo lường A1, A2, …, AN (1 ≤ N ≤ 105, -109 ≤ Ai ≤ 109).

Bạn hãy viết chương trình thực hiện 2 yêu cầu:

  • Tìm phần tử xuất hiện nhiều lần nhất: Xác định giá trị X có số lần xuất hiện K lớn nhất trong mảng. Nếu có nhiều giá trị có cùng số lần xuất hiện cao nhất, hãy chọn giá trị X nhỏ nhất.
  • Lọc số dương ban đầu: In danh sách các số dương (Ai > 0) phân biệt (không trùng lặp), theo đúng thứ tự xuất hiện lần đầu tiên của chúng trong dãy ban đầu. Nếu mảng không có số dương nào, in -1.

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: Một số nguyên dương N (1 ≤ N ≤ 105).
  • 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 2 dòng:

  • Dòng 1: Gia tri: <X>, So lan: <K>
  • Dòng 2: Danh sách các số dương phân biệt cách nhau bởi một dấu cách (hoặc in -1 nếu không có số dương).

Ràng buộc

  • 1 ≤ N ≤ 105.
  • -109 ≤ Ai ≤ 109.
  • Thời gian chạy: 1000ms.
  • Bộ nhớ tối đa: 256MB.

Ví dụ 1

Input

8
5 -2 3 5 -2 7 3 -2

Output

Gia tri: -2, So lan: 3
5 3 7

Giải thích

  • Giá trị -2 xuất hiện 3 lần (nhiều nhất).
  • Các số dương trong mảng ban đầu theo thứ tự là: 5, 3, 5, 7, 3. Khi lọc trùng lặp và giữ thứ tự xuất hiện đầu tiên: 5 3 7.

Ví dụ 2

Input

5
4 2 4 2 -1

Output

Gia tri: 2, So lan: 2
4 2

Giải thích

Cả 2 và 4 đều xuất hiện 2 lần. Do yêu cầu chọn giá trị nhỏ hơn khi hòa số lần, ta chọn 2. Danh sách số dương phân biệt giữ nguyên thứ tự ban đầu: 4 2.

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.