[Buổi 30][Template & ngoại lệ][HW] Bài 5: Thống kê generic theo ngưỡng
Thống kê generic theo ngưỡng
Bối cảnh
Viết template statsAbove<T>(vector<T>, threshold) trả ba giá trị: count phần tử ≥ threshold, sum của chúng và maximum trong nhóm. Nếu không có phần tử đạt, caller in 0 0 NONE. Chương trình hỗ trợ type int và double theo type tag; với double, sum/max in hai chữ số.
Bài Medium nâng từ generic min/max đơn lẻ sang generic traversal có state aggregate. Thuật toán phải dùng cùng một template function cho cả hai kiểu số.
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
- Một template function dùng chung.
- Đếm/sum/max phần tử ≥ threshold.
- Hỗ trợ I và D.
- Format double 2 decimals.
Input
Dòng 1 type n threshold; dòng 2 n giá trị.
Output
Summary theo type.
Ràng buộc
1≤n≤5000.
Ví dụ 1
Input
I 5 3
1 3 5 2 4
Output
3 12 5
Giải thích
Các phần tử ≥3 là3,5,4: count3, sum12, max5. Template instantiation với long long trả đúng 3 12 5.
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 2.5
1.5 2.5 3.0 2.0
Output
2 5.50 3.00
Giải thích
Các giá trị ≥2.5 là2.5 và3.0: count2, sum5.50, max3.00. Cùng template chạy với double và caller chỉ khác phần format.
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: HOMEWORK
- Độ khó: Medium
- Concepts: function template, vector, generic numeric operations, pair result
- Giới hạn kiến thức: B01-B30
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments