[Buổi 31][Củng cố OOP nâng cao][HW] Bài 2: Generic Safe Queue


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

Generic Safe Queue

Bối cảnh

Xây SafeQueue<T> hỗ trợ PUSH x, FRONT, POP, SIZE, SUM. FRONTPOP khi rỗng phải ném out_of_range. SUM chỉ được dùng cho kiểu số trong input bài (I hoặc D) và trả tổng hiện tại; chương trình có thể cài cùng class template và helper generic.

Bài Medium tích hợp class template và exception recovery. Sau một lỗi empty, queue phải tiếp tục hoạt động bình thường và state không bị thay đổi.

B31 là phần tích hợp, nên bài toán cần thể hiện trách nhiệm giữa nhiều abstraction thay vì chỉ ghép cú pháp. Polymorphism chịu trách nhiệm thay behavior; template chịu trách nhiệm reuse theo type; exception chịu trách nhiệm recovery khi input/state bất hợp lệ. Core workflow phải tiếp tục giữ invariant dù một record hoặc command bị lỗi.

B31 là phần tích hợp, nên bài toán cần thể hiện trách nhiệm giữa nhiều abstraction thay vì chỉ ghép cú pháp. Polymorphism chịu trách nhiệm thay behavior; template chịu trách nhiệm reuse theo type; exception chịu trách nhiệm recovery khi input/state bất hợp lệ. Core workflow phải tiếp tục giữ invariant dù một record hoặc command bị lỗi.

Yêu cầu

  1. SafeQueue<T> generic.
  2. FRONT/POP throw khi empty.
  3. Support I/D.
  4. SUM generic.
  5. Tiếp tục sau ERROR.

Input

Dòng 1 type q; q command.

Output

Mỗi query/POP một dòng; PUSH không output.

Ràng buộc

q≤5000.

Ví dụ 1

Input

I 9
PUSH 1
PUSH 2
FRONT
SUM
POP
FRONT
POP
POP
SIZE

Output

1
3
1
2
2
ERROR
0

Giải thích

Queue [1,2]: FRONT1, SUM3, POP1, FRONT2, POP2. POP tiếp theo trên empty gây ERROR nhưng không đổi state; SIZE cuối0. Output thể hiện FIFO và exception-safe empty handling.

Mẫu này kiểm tra pipeline ở mức tích hợp: input đi qua validation, chọn runtime behavior, cập nhật aggregate rồi mới sinh output. Nếu một bước thất bại, fallback/ERROR phải đúng contract và các summary phía sau không được tính nhầm dữ liệu lỗi. Vì vậy trace mẫu chính là kiểm tra invariant xuyên suốt workflow.

Ví dụ 2

Input

D 7
FRONT
PUSH 1.5
PUSH 2.5
SUM
POP
SUM
SIZE

Output

ERROR
4.00
1.50
2.50
1

Giải thích

FRONT đầu ERROR. Sau PUSH1.5,2.5, SUM4.00; POP trả1.50, SUM còn2.50, SIZE1. Queue vẫn sử dụng được sau exception đầu.

Mẫu này kiểm tra pipeline ở mức tích hợp: input đi qua validation, chọn runtime behavior, cập nhật aggregate rồi mới sinh output. Nếu một bước thất bại, fallback/ERROR phải đúng contract và các summary phía sau không được tính nhầm dữ liệu lỗi. Vì vậy trace mẫu chính là kiểm tra invariant xuyên suốt workflow.

Thông tin học tập

  • Module: M08
  • Buổi: B31
  • Loại bài: HOMEWORK
  • Độ khó: Medium
  • Concepts: class template, queue state, exceptions, command simulation
  • Giới hạn kiến thức: B01-B31
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo