[Buổi 26][Vòng đời & operator][HW] Bài 3: Xếp hạng sản phẩm bằng operator<


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

Xếp hạng sản phẩm bằng operator<

Bối cảnh

Mỗi Productid, price, stock. "Giá trị tồn kho" là price*stock. Định nghĩa operator< sao cho khi std::sort tăng dần, sản phẩm có inventoryValue lớn hơn đứng trước; nếu hòa value, stock lớn hơn đứng trước; nếu vẫn hòa, ID nhỏ hơn đứng trước. Sau sort in id value stock.

Bài Medium bắt buộc đặt semantics ranking vào operator<, thay vì viết comparator ngoài, để luyện overload operator như một quan hệ thứ tự tự nhiên do đề quy ước.

Ở B26, constructor/operator/destructor phải được xem như một phần của semantics object chứ không chỉ là cú pháp. Constructor nên đưa object về representation chuẩn ngay từ đầu; operator đọc các object hợp lệ và trả kết quả có cùng invariant; destructor chỉ giải phóng tài nguyên thuộc ownership của chính object.

Ở B26, constructor/operator/destructor phải được xem như một phần của semantics object chứ không chỉ là cú pháp. Constructor nên đưa object về representation chuẩn ngay từ đầu; operator đọc các object hợp lệ và trả kết quả có cùng invariant; destructor chỉ giải phóng tài nguyên thuộc ownership của chính object.

Yêu cầu

  1. Class Product + constructor.
  2. Method inventoryValue().
  3. Overload operator< strict theo 3 tiêu chí.
  4. Sort vector.

Input

Dòng 1 n; n dòng id price stock.

Output

n dòng id value stock.

Ràng buộc

1≤n≤5000, price,stock không âm, product vừa long long.

Ví dụ 1

Input

4
P1 10 5
P2 25 2
P3 5 20
P0 10 5

Output

P3 100 20
P0 50 5
P1 50 5
P2 50 2

Giải thích

P3 có value100 nên đứng đầu. P1,P2,P0 đều value50; stock P1/P0=5 lớn hơn P2=2 nên P1/P0 trước P2; tie P0/P1 theo ID khiến P0 trước P1. Thứ tự P3,P0,P1,P2.

Mẫu này đồng thời kiểm tra invariant mà constructor/operator phải giữ. Kết quả không chỉ đúng về giá trị cuối mà còn phải được biểu diễn ở dạng canonical của class; các object nguồn vẫn giữ state riêng nếu phép toán được thiết kế theo value semantics.

Ví dụ 2

Input

1
X 0 0

Output

X 0 0

Giải thích

X value0 stock0 và chỉ một object, output X 0 0.

Mẫu này đồng thời kiểm tra invariant mà constructor/operator phải giữ. Kết quả không chỉ đúng về giá trị cuối mà còn phải được biểu diễn ở dạng canonical của class; các object nguồn vẫn giữ state riêng nếu phép toán được thiết kế theo value semantics.

Thông tin học tập

  • Module: M07
  • Buổi: B26
  • Loại bài: HOMEWORK
  • Độ khó: Medium
  • Concepts: class, constructor, operator<, sorting, multi-key order
  • Giới hạn kiến thức: B01-B26
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo