[Buổi 30][Template & ngoại lệ][ADV] Bài 1: Validation Pipeline với ngoại lệ tùy chỉnh


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

Validation Pipeline với ngoại lệ tùy chỉnh

Bối cảnh

Một hệ thống nhập liệu xử lý record id value. value có thể là int hoặc double tùy type tag. Cần generic validator theo range [low,high]. Các lỗi phải phân biệt bằng custom exception ValidationError chứa code:

  • DUPLICATE_ID
  • OUT_OF_RANGE
  • BAD_ORDER nếu low>high ngay từ cấu hình.

Với từng record, ID trùng hoặc value ngoài range bị từ chối nhưng chương trình tiếp tục. Các record hợp lệ được lưu, sau đó in count hợp lệ, tổng value và ID có value lớn nhất; tie ID tăng. Nếu cấu hình BAD_ORDER, in duy nhất CONFIG_ERROR.

Bài Hard tích hợp class exception tùy chỉnh, template validator cho int/double, recovery theo từng record và aggregate sau validation. Không dùng inheritance exception phức tạp ngoài kế thừa std::exception cơ bản.

B30 kết hợp hai ý tưởng: generic code để tránh copy thuật toán theo kiểu dữ liệu và exception để tách luồng lỗi khỏi luồng thành công. Exception chỉ nên xuất hiện ở điểm precondition/validation thất bại; state hoặc aggregate không được cập nhật trước khi biết thao tác đã hợp lệ. Với template, hãy xác định rõ các toán tử/operation mà type T cần hỗ trợ.

B30 kết hợp hai ý tưởng: generic code để tránh copy thuật toán theo kiểu dữ liệu và exception để tách luồng lỗi khỏi luồng thành công. Exception chỉ nên xuất hiện ở điểm precondition/validation thất bại; state hoặc aggregate không được cập nhật trước khi biết thao tác đã hợp lệ. Với template, hãy xác định rõ các toán tử/operation mà type T cần hỗ trợ.

Yêu cầu

  1. Custom ValidationError(code).
  2. Template validateRange<T>.
  3. ID uniqueness.
  4. Recover từng record.
  5. Support I/D; CONFIG_ERROR nếu low>high.

Input

Dòng 1 type n low high; n dòng id value.

Output

CONFIG_ERROR hoặc VALID x INVALID y SUM ... BEST id value.

Ràng buộc

1≤n≤5000.

Ví dụ 1

Input

I 5 0 10
A 5
B 11
A 7
C 10
D 0

Output

VALID 3 INVALID 2 SUM 15 BEST C 10

Giải thích

A5 hợp lệ; B11 out-of-range; A7 duplicate; C10 và D0 hợp lệ. VALID3 INVALID2, sum15. BEST là C10 vì value lớn nhất. Output summary phản ánh hai loại lỗi nhưng vẫn tiếp tục xử lý.

Ví dụ này đồng thời kiểm tra cả nhánh thành công và tính ổn định khi có lỗi/generic state. Nếu validation fail, output lỗi phải xuất hiện mà dữ liệu hợp lệ trước đó vẫn được giữ. Nếu generic function được instantiate với type khác, cùng logic xử lý vẫn phải tạo kết quả tương ứng theo type đó.

Ví dụ 2

Input

D 4 0 1
A 0.5
B 1.0
C -0.1
D 0.5

Output

VALID 3 INVALID 1 SUM 2.00 BEST B 1.00

Giải thích

A0.5,B1.0,D0.5 hợp lệ; C-0.1 invalid. Sum2.00, best B1.00. Hai record A/D hòa0.5 không ảnh hưởng best.

Ví dụ này đồng thời kiểm tra cả nhánh thành công và tính ổn định khi có lỗi/generic state. Nếu validation fail, output lỗi phải xuất hiện mà dữ liệu hợp lệ trước đó vẫn được giữ. Nếu generic function được instantiate với type khác, cùng logic xử lý vẫn phải tạo kết quả tương ứng theo type đó.

Thông tin học tập

  • Module: M08
  • Buổi: B30
  • Loại bài: ADVANCED
  • Độ khó: Hard
  • Concepts: custom exception, templates, validation pipeline, generic range, command processing
  • Giới hạn kiến thức: B01-B30
  • Time limit: 2 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo