[Buổi 28][Kế thừa][HW] Bài 3: Sản phẩm giảm giá theo kế thừa


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

Sản phẩm giảm giá theo kế thừa

Bối cảnh

Một cửa hàng có lớp Product lưu idprice. Lớp DiscountProduct kế thừa Product và bổ sung discountPercent cùng priority. Giá sau giảm là price*(100-discount)/100. Cần xếp các sản phẩm theo giá sau giảm tăng dần; nếu hòa, priority lớn hơn đứng trước; nếu vẫn hòa, ID tăng.

Bài Medium không dùng virtual. Trọng tâm là object lớp con tái sử dụng state của lớp cha, derived method tạo metric mới, sau đó metric này được dùng trong ranking. Hãy tránh khai báo lại price trong lớp con vì dễ tạo hai nguồn state khác nhau.

Ở 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 base Product và derived DiscountProduct.
  2. Derived method finalPrice().
  3. Sort finalPrice tăng → priority giảm → id tăng.
  4. In id và finalPrice 2 decimals.

Input

Dòng 1 n; n dòng id price discount priority.

Output

n dòng id finalPrice.

Ràng buộc

1≤n≤5000, price≥0, discount 0..100.

Ví dụ 1

Input

4
P1 100 10 1
P2 90 0 3
P0 120 25 2
P3 50 0 1

Output

P3 50.00
P2 90.00
P0 90.00
P1 90.00

Giải thích

P3 có giá cuối50 nên đứng đầu. P1, P2 và P0 đều có giá cuối90; khi hòa finalPrice, priority quyết định: P2=3, P0=2, P1=1. Vì vậy thứ tự cuối là P3, P2, P0, P1.

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 100 50 1
B 50 0 2

Output

B 50.00
A 50.00

Giải thích

A có giá sau giảm50, B cũng50. Khi finalPrice hòa, priority B=2 lớn hơn A=1 nên B đứng trước A dù ID A nhỏ hơn.

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, base reuse, derived method, sorting
  • 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