[R15A] 现在几点

  • 难度 入门
  • 时限 1s
  • 空限 512m
  • 数学

数据规模:0x230 \le x \le 230y590 \le y \le 591t1061 \le t \le 10^6

思路

把起始时刻换算成「当天第几分钟」x×60+yx \times 60 + y,加上持续时间 tt 后对 14401440(一天的总分钟数)取模,得到结束时刻的分钟数,再除回去得到时和分。

复杂度:时间 O(1)O(1),空间 O(1)O(1)

仓颉实现

import std.env.*
import std.convert.*

main(): Int64 {
    let reader = getStdIn()
    let xyt = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p => Int64.parse(p) })
    let total = (xyt[0] * 60 + xyt[1] + xyt[2]) % 1440
    let out = StringBuilder()
    out.append(total / 60)
    out.append(" ")
    out.append(total % 60)
    println(out.toString())
    return 0
}

要点:

  • 跨天的情况由取模统一处理:tt 可达 10610^6 分钟(约 694 天),直接先加后取模即可,不需要模拟每一天。
  • total / 60total % 60 分别是结束时刻的小时和分钟。