[Buổi 28][Kế thừa][HW] Bài 4: Giáo viên và tải giảng dạy


LÀM BÀI

Points: 100
Time limit: 1.0s
Memory limit: 256M

Author:
Problem types
Allowed languages
C++

Giáo viên và tải giảng dạy

Bối cảnh

Lớp Person lưu id,name; lớp Teacher kế thừa và bổ sung baseSalary, hours, ratePerHour. Thu nhập tháng = baseSalary + hours*ratePerHour. Hệ thống cần lọc các Teacher có thu nhập ít nhất T rồi xếp theo income giảm; tie hours tăng; tie ID tăng.

Bài Medium yêu cầu constructor chain rõ ràng và derived behavior dùng cả data base lẫn data riêng. Không sử dụng virtual vì toàn bộ collection đều là Teacher.

Ở B28, mục tiêu không phải làm hierarchy càng sâu càng tốt mà là reuse đúng quan hệ is-a. State thuộc lớp cha chỉ nên tồn tại một lần và lớp con dùng lại thông qua constructor/accessor phù hợp. Khi một metric được tạo từ cả field kế thừa và field riêng, hãy xác định rõ lớp nào chịu trách nhiệm tính metric đó để tránh duplicate logic giữa base và derived.

Yêu cầu

  1. Person(id,name), Teacher(...) kế thừa.
  2. Method income().
  3. Filter income≥T.
  4. Sort income giảm → hours tăng → id tăng.
  5. Nếu rỗng in NONE.

Input

Dòng 1 n T; n dòng id name base hours rate.

Output

Danh sách đạt điều kiện: id name income; hoặc NONE.

Ràng buộc

1≤n≤5000, các số không âm.

Ví dụ 1

Input

4 100
T1 An 50 10 5
T2 Binh 80 2 10
T3 Chi 90 1 5
T0 Dung 60 8 5

Output

T2 Binh 100
T0 Dung 100
T1 An 100

Giải thích

T1 income100, T2=100, T3=95 bị loại, T0=100. Ba người còn lại cùng income100; hours lần lượt2,8,10 nên thứ tự T2,T0,T1. Output giữ cả name từ lớp Person và income từ Teacher.

Ví dụ này cũng kiểm tra đúng luồng kế thừa: phần state của lớp cha được khởi tạo và tái sử dụng, phần riêng của lớp con chỉ bổ sung behavior/dữ liệu cần thiết. Kết quả cuối vì thế phải phản ánh đồng thời dữ liệu inherited và dữ liệu derived, không có field nào bị khai báo lại hoặc bỏ quên.

Ví dụ 2

Input

2 1000
A A 10 1 1
B B 20 2 2

Output

NONE

Giải thích

Cả A và B đều có income nhỏ hơn1000 nên danh sách sau filter rỗng. Theo contract, chương trình in NONE.

Ví dụ này cũng kiểm tra đúng luồng kế thừa: phần state của lớp cha được khởi tạo và tái sử dụng, phần riêng của lớp con chỉ bổ sung behavior/dữ liệu cần thiết. Kết quả cuối vì thế phải phản ánh đồng thời dữ liệu inherited và dữ liệu derived, không có field nào bị khai báo lại hoặc bỏ quên.

Thông tin học tập

  • Module: M08
  • Buổi: B28
  • Loại bài: HOMEWORK
  • Độ khó: Medium
  • Concepts: inheritance, constructor chain, derived aggregate, filtering, ranking
  • Giới hạn kiến thức: B01-B28
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo