公式

A - 時刻の正規化 / Time Normalization 解説 by admin

Qwen3-Coder-480B

概要

与えられた「時」と「分」の組を、正しい日付・時刻(何日後、何時、何分)に変換する問題。

考察

この問題は、単位の変換と剰余・商の計算によって解ける基本的な問題です。

まず、分の値 \(M\)\(60\) 以上でも入力されるため、これを適切に「時の繰り上がり」に変換する必要があります。
例えば、\(80\) 分は \(1\) 時間 \(20\) 分なので、\(80 \div 60 = 1\) を時間に足し、残り \(80 \bmod 60 = 20\) を新しい分の値とします。

次に、更新された時間 \(H'\)\(24\) 以上であれば、これは「日数の繰り上がり」を意味します。
例えば、\(25\) 時間は \(1\)\(1\) 時間なので、\(25 \div 24 = 1\) 日、残り \(25 \bmod 24 = 1\) 時間となります。

このように、商(//)と剰余(%)の計算を順に行うことで、正規化された日数・時・分を求めることができます。

なお、制約より \(H, M\) は最大で \(10^9\) までありえるため、素朴なシミュレーション(例:ループで1分ずつ増やすなど)はTLEになります。数学的に一発で求める方法が求められます。

アルゴリズム

以下の手順で各時刻データを正規化します。

  1. 分の繰り上げ

    • 新しい時間 \(H'\)\(H + \left\lfloor \frac{M}{60} \right\rfloor\) とする。
    • 新しい分 \(m\)\(M \bmod 60\) とする。
  2. 時の繰り上げ

    • 日数 \(D\)\(\left\lfloor \frac{H'}{24} \right\rfloor\) とする。
    • 正規化後の時間 \(h\)\(H' \bmod 24\) とする。

最終的に、\(D\), \(h\), \(m\) を出力すればよいです。

具体例

入力が 25 80 の場合: - 分の繰り上げ:\(H' = 25 + \left\lfloor \frac{80}{60} \right\rfloor = 25 + 1 = 26\)\(m = 80 \bmod 60 = 20\) - 時の繰り上げ:\(D = \left\lfloor \frac{26}{24} \right\rfloor = 1\)\(h = 26 \bmod 24 = 2\)

よって出力は 1 2 20

計算量

  • 時間計算量: \(O(N)\)
  • 空間計算量: \(O(1)\)

各データに対して定数時間で処理できるため、全体で線形時間で解けます。

実装のポイント

  • 商と剰余の計算は整数演算で十分高速です。

  • 入力の範囲が非常に大きい(最大 \(10^9\))ので、ループなどでシミュレーションしないこと。

  • 変数名は \(H', h, m, D\) のように整理して、意味を明確にするとコードが読みやすくなります。

    ソースコード

N = int(input())
for _ in range(N):
    H, M = map(int, input().split())
    # 分の繰り上げ
    H += M // 60
    m = M % 60
    # 時の繰り上げ
    D = H // 24
    h = H % 24
    print(D, h, m)

この解説は qwen3-coder-480b によって生成されました。

投稿日時:
最終更新: