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

Quản lý học viên và sắp xếp đa tiêu chí

Ban đào tạo AI Empire Academy tổ chức kỳ thi tuyển chọn thành viên đội tuyển thi đấu lập trình quốc tế. Có N thí sinh tham gia (1 ≤ N ≤ 104). Mỗi thí sinh có các thông tin:

C++Nâng cao45 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ủ đề

structscustom sortingclean codedebuggingstl algorithm

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

Nội dung đề bài

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

  • Khai báo và sử dụng cấu trúc dữ liệu tự định nghĩa (struct) trong C++.
  • Viết hàm so sánh tùy biến (Custom Comparator) hoặc nạp chồng toán tử operator< cho thuật toán std::sort.
  • Xử lý sắp xếp đa tiêu chí (Multi-criteria Sorting) theo thứ tự ưu tiên chặt chẽ.
  • So sánh số thực an toàn tránh sai số dấu phẩy động (epsilon = 1e-7).
  • Định dạng xuất dữ liệu bảng chuyên nghiệp bằng <iomanip>.

Mô tả bài toán

Ban đào tạo AI Empire Academy tổ chức kỳ thi tuyển chọn thành viên đội tuyển thi đấu lập trình quốc tế. Có N thí sinh tham gia (1 ≤ N ≤ 104). Mỗi thí sinh có các thông tin:

  • Mã học viên (id): Chuỗi ký tự độ dài 6 (ví dụ: AI1001), không chứa khoảng trắng.
  • Họ tên (name): Chuỗi ký tự tiếng Việt không dấu hoặc tiếng Anh (có thể chứa khoảng trắng, từ 1 đến 50 ký tự).
  • Điểm Coding (coding): Số nguyên từ 0 đến 1000.
  • Điểm GPA (gpa): Số thực từ 0.00 đến 4.00.

Quy tắc xếp hạng ưu tiên:

  • Thí sinh có điểm coding cao hơn được xếp trước.
  • Nếu điểm coding bằng nhau, thí sinh có gpa cao hơn được xếp trước (so sánh số thực với sai số ε = 10-7).
  • Nếu cả coding và gpa bằng nhau, thí sinh có mã id nhỏ hơn theo thứ tự từ điển được xếp trước.

Yêu cầu đầu ra:

  • In danh sách thí sinh sau khi đã sắp xếp, mỗi thí sinh trên 1 dòng gồm: Rank ID Name Coding GPA
  • Rank: Thứ hạng từ 1 đến N.
  • ID: Mã học viên.
  • Name: Họ tên học viên.
  • Coding: Điểm coding.
  • GPA: Điểm GPA in chính xác 2 chữ số thập phân.
  • Các trường cách nhau bởi đúng 1 dấu cách.
  • Dòng cuối cùng in thông tin vinh danh Thủ khoa (Rank 1):

Thu khoa: <Name> (ID: <ID>) - Diem coding: <Coding>

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 ≤ 104).
  • Tiếp theo là N cụm thông tin của N học viên. Mỗi cụm gồm đúng 3 dòng:
  • Dòng 1: Mã học viên id.
  • Dòng 2: Họ tên name.
  • Dòng 3: Gồm 2 số: số nguyên coding và số thực gpa.

Output

  • N dòng đầu tiên: Danh sách học viên xếp hạng theo mẫu: <Rank> <ID> <Name> <Coding> <GPA>.
  • Dòng cuối cùng: Thông tin Thủ khoa: Thu khoa: <Name> (ID: <ID>) - Diem coding: <Coding>.

Ràng buộc

  • 1 ≤ N ≤ 104.
  • Mã id luôn duy nhất.
  • Thời gian chạy: 1500ms.
  • Bộ nhớ tối đa: 256MB.

Ví dụ 1

Input

3
AI1001
Nguyen Van An
850 3.75
AI1002
Tran Thi Binh
920 3.60
AI1003
Le Hoang Cuong
850 3.90

Output

1 AI1002 Tran Thi Binh 920 3.60
2 AI1003 Le Hoang Cuong 850 3.90
3 AI1001 Nguyen Van An 850 3.75
Thu khoa: Tran Thi Binh (ID: AI1002) - Diem coding: 920

Giải thích

  • AI1002 có điểm Coding cao nhất (920) nên xếp Rank 1.
  • AI1001 và AI1003 cùng có điểm Coding là 850, xét tiếp GPA: AI1003 có GPA 3.90 cao hơn AI1001 (3.75) nên xếp trên.
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.

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.