[Buổi 26][Vòng đời & operator][HW] Bài 1: Thời gian chuẩn hóa và cộng phút
Thời gian chuẩn hóa và cộng phút
Bối cảnh
Một Time object biểu diễn thời điểm trong ngày bằng giờ/phút. Constructor nhận hai số có thể vượt miền thông thường, ví dụ 10 125, và chuẩn hóa theo modulo 24 giờ. operator+ cộng một số phút không âm vào Time rồi trả object mới; object gốc không đổi. Hệ thống nhận một thời điểm ban đầu và q số phút cần cộng độc lập từ cùng thời điểm gốc, in kết quả HH:MM.
Bài Medium nhấn mạnh constructor giữ invariant 0≤hour<24, 0≤minute<60 và operator tạo object mới. Nếu main tự normalize nhiều nơi, rất dễ có logic không nhất quán.
Ở 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
- Class Time private/public state phù hợp.
- Constructor normalize h,m.
- Overload
operator+(long long minutes). - Mỗi query cộng từ original Time.
- In HH:MM.
Input
Dòng 1 h m; dòng q; q dòng minutes.
Output
q dòng HH:MM.
Ràng buộc
|h|,|m|≤1e9, 0≤minutes≤1e12.
Ví dụ 1
Input
10 125
3
0
10
1000
Output
12:05
12:15
04:45
Giải thích
Constructor chuẩn hóa 10:125 thành 12:05 vì 125 phút =2h05. Query0 cho12:05; +10 thành12:15; +1000 phút =16h40 nên từ12:05 vòng ngày thành04:45. Mỗi query bắt đầu từ base chứ không cộng dồn.
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
23 50
2
20
1440
Output
00:10
23:50
Giải thích
23:50 +20 phút qua nửa đêm thành00:10. +1440 là đúng một ngày nên vẫn23:50. Output hai dòng tương ứng.
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 invariant, operator+, normalization, comparison
- Giới hạn kiến thức: B01-B26
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments