[Buổi 26][Vòng đời & operator][HW] Bài 1: Thời gian chuẩn hóa và cộng phút


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

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

  1. Class Time private/public state phù hợp.
  2. Constructor normalize h,m.
  3. Overload operator+(long long minutes).
  4. Mỗi query cộng từ original Time.
  5. 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

There are no comments at the moment.

Zalo