C10-05 · Ghép hai lớp

Xem dạng PDF

Gửi bài giải

Điểm: 1,00
Giới hạn thời gian: 2.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

Đề

Cho hai danh sách lớp liền nhau, mỗi danh sách theo khung XS-07 (dòng mã sai bị bỏ qua lặng lẽ). Ghép thành một danh sách:

  • mã chỉ có ở một lớp: lấy sinh viên đó;
  • mã có ở cả hai lớp (một mã trùng): giữ bản của lớp thứ nhất, bỏ bản của lớp thứ hai.

In danh sách đã ghép theo mã tăng dần, mỗi người một dòng dạng ma Ho Ten diem_hp loai (như C10-01). Dòng cuối là TRUNG k, với k là số mã trùng (kể cả khi k = 0). Chỉ mã hợp lệ (đúng 8 chữ số) mới được xét trùng: dòng mã sai đã bị bỏ khi đọc.

Dữ liệu vào

  • Dòng đầu: số nguyên n1, rồi n1 dòng của lớp thứ nhất.
  • Dòng tiếp: số nguyên n2, rồi n2 dòng của lớp thứ hai.
  • Mỗi dòng sinh viên dạng ma ho ten diem_qt diem_ck (như C10-01).

Kết quả

Các dòng của danh sách đã ghép theo mã tăng dần, rồi dòng TRUNG k.

Ràng buộc

  • 0 ≤ n1, n2 ≤ 1000.
  • Mã: 1–12 ký tự, chỉ gồm chữ số và chữ cái Latin; hợp lệ khi gồm đúng 8 chữ số. Trong mỗi lớp, các mã hợp lệ không trùng nhau (hai lớp thì có thể có mã chung).
  • Họ tên: 1–10 từ, mỗi từ 1–20 chữ cái Latin không dấu, hoa thường tùy ý; giữa các phần có thể có nhiều dấu cách.
  • Mỗi điểm trong đoạn [0; 10], dạng số nguyên hoặc một chữ số thập phân, dấu chấm hoặc dấu phẩy.

Gợi ý

Viết một hàm đọc một lớp rồi gọi hai lần. Kiểm mã đã có bằng tim_theo_ma (mục 8.4.2). Sắp bằng sorted với hàm khóa trả về sv["ma"] (mục 6.2.3): sorted không tự so được hai dict.

Ví dụ 1

Dữ liệu vào:

2
23010003 Le Minh Duc 8.0 8.8
23010001 Nguyen Van An 7.5 8.0
2
23010002 Tran Thi Binh 6.5 7.0
23010001 Nguyen Van An 9 9

Kết quả:

23010001 Nguyen Van An 7.8 B
23010002 Tran Thi Binh 6.8 C
23010003 Le Minh Duc 8.5 A
TRUNG 1

Ví dụ 2

Dữ liệu vào:

2
23010005 hoang gia HAN 5 3
2301004 Pham Quoc Dung 4 4
2
2301004 Pham Quoc Dung 9 9
23010004 Pham Quoc Dung 4.0 4.0

Kết quả:

23010004 Pham Quoc Dung 4.0 D
23010005 Hoang Gia Han 3.8 F
TRUNG 0

Giải thích ví dụ

  • Ví dụ 1 (ví dụ của sách): mã 23010001 có ở cả hai lớp nên giữ bản của lớp thứ nhất (7,5 và 8,0 → 7,8 B), bỏ bản (9, 9) của lớp thứ hai; có 1 mã trùng. Ba mã còn lại in theo thứ tự tăng 23010001, 23010002, 23010003.
  • Ví dụ 2 (bổ sung): mã 2301004 (7 chữ số) xuất hiện ở cả hai lớp nhưng là mã sai, cả hai dòng đều bị bỏ nên không tính là trùng. Mã 23010004 chỉ có ở lớp thứ hai nên được lấy; sau khi sắp, 23010004 đứng trước 23010005. TRUNG 0 vẫn phải in.

Nguồn trong sách: Bài C10-05, mục 10.5, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long · Mức: (***)


Đang tải...