[Buổi 28][Kế thừa][ADV] Bài 1: Phân tích hồ sơ nghiên cứu qua kế thừa


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

Phân tích hồ sơ nghiên cứu qua kế thừa

Bối cảnh

Một hệ thống học vụ có chuỗi Person -> Student -> ResearchStudent. ResearchStudent chứa id, gpa, papers, citations, service. Điểm năng lực impact = gpa*100 + papers*25 + citations*2 + service. Hệ thống nhận n hồ sơ và q truy vấn:

  • TOP k: in k ID có impact lớn nhất, tie GPA cao hơn, papers cao hơn, ID tăng.
  • ATLEAST x: đếm số hồ sơ có impact≥x.
  • BESTGPA: trong nhóm có GPA cao nhất, chọn impact lớn nhất rồi ID nhỏ hơn.

Bài Hard chưa dùng virtual. Độ khó đến từ nhiều query dùng các derived metric khác nhau trên cùng inheritance chain. Đây cũng là bài kiểm tra "inheritance suitability": quan hệ is-a phải hợp lý, còn polymorphism chưa cần vì collection chỉ chứa ResearchStudent.

Ở 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. Dùng inheritance chain đúng is-a.
  2. Method impact().
  3. Tiền xử lý ranking.
  4. Xử lý TOP/ATLEAST/BESTGPA.
  5. Không dùng virtual.

Input

Dòng 1 n; n dòng id gpa papers citations service; dòng q; q query.

Output

Mỗi query một dòng.

Ràng buộc

1≤n,q≤5000, dữ liệu không âm.

Ví dụ 1

Input

4
S1 3.5 2 10 5
S2 4 0 0 0
S3 3.5 3 0 0
S0 4 0 0 0
4
TOP 3
ATLEAST 400
BESTGPA
ATLEAST 300

Output

S3 S1 S0
4
S0
4

Giải thích

Impact: S1=395, S2=400, S3=425, S0=400. TOP3 là S3 rồi S0,S2 vì S0/S2 hòa metric và ID S0<S2. ATLEAST400 có ba hồ sơ. BESTGPA xét S0,S2 cùng GPA4 và impact400, nên chọn S0.

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
A 1 0 0 0
B 2 0 0 0
3
TOP 5
ATLEAST 150
BESTGPA

Output

B A
1
B

Giải thích

TOP5 chỉ có hai hồ sơ nên in B A theo impact200 và100. ATLEAST150 đếm B=1. BESTGPA chọn B vì GPA2 cao nhất.

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: ADVANCED
  • Độ khó: Hard
  • Concepts: inheritance, multilevel design, static dispatch, derived metrics, multiple queries
  • Giới hạn kiến thức: B01-B28
  • Time limit: 2 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo