C8-10 · Điểm cao nhất qua các lần thi

Xem dạng PDF

Gửi bài giải

Điểm: 1,00
Giới hạn thời gian: 3.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Nguồn bài:
Sách "Lập trình cơ sở với Python"
Dạng bài
Ngôn ngữ cho phép
Python

Đề

Một kỳ thi cho phép thi nhiều lần. Cho kết quả của n lần thi, mỗi lần gồm mã sinh viên và điểm. Với mỗi sinh viên, hãy in điểm cao nhất mà sinh viên đó đạt được qua các lần thi, theo mã tăng dần.

Dữ liệu vào

  • Dòng đầu chứa n là số lần thi.
  • n dòng tiếp theo, mỗi dòng ma diem của một lần thi. Một mã có thể xuất hiện nhiều lần, không nhất thiết liền nhau.

Kết quả

Mỗi sinh viên một dòng: mã và điểm cao nhất (1 chữ số thập phân, :.1f), cách nhau một dấu cách; các dòng theo mã tăng dần.

Ràng buộc

  • ~1 \le n \le 10^5~.
  • Mã gồm đúng 8 chữ số, có thể bắt đầu bằng 0 (ví dụ 00123456); mã phải in nguyên văn.
  • Điểm là số trong đoạn ~[0;\ 10]~, có tối đa một chữ số thập phân, có thể viết dạng số nguyên (6, 10).

Ví dụ

Dữ liệu vào:

3
23010002 6
23010001 7
23010001 3.5

Kết quả:

23010001 7.0
23010002 6.0

Giải thích ví dụ

Sinh viên 23010001 thi hai lần được 7 và 3,5; điểm cao nhất là 7, in 7.0. Sinh viên 23010002 thi một lần được 6, in 6.0. Mã 23010001 nhỏ hơn nên in trước. Chú ý lần thi cuối của 23010001 (3,5) không phải điểm cao nhất: gán thẳng d[ma] = diem mỗi lần là sai.

Lưu ý

  • Đổi điểm sang số thực trước khi so: theo thứ tự chuỗi thì "9" > "10".
  • Nếu viết if diem > d.get(ma, 0): d[ma] = diem thì sinh viên chỉ toàn điểm 0 sẽ không bao giờ được ghi vào dict; hãy kiểm ma not in d trước, chọn mặc định nhỏ hơn mọi điểm, hoặc viết d[ma] = max(d.get(ma, 0), diem) (cách này luôn ghi khóa nên đúng).
  • Mã là chuỗi: không đổi sang int (mất chữ số 0 ở đầu).

Nguồn: Bài C8-10, mục 8.9, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long.

Nguồn trong sách: bài tập C8-10 (mục 8.9) · Mức: (**)


Đang tải...