[R68A] 发车

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

数据规模:0ST10000 \le S \le T \le 10001K10001 \le K \le 1000

思路

发车时刻为 S,S+K,S+2K,S, S + K, S + 2K, \ldots,即所有满足 tS(modK)t \equiv S \pmod KtSt \ge S 的时刻。当前时刻 TST \ge S,设 d=(TS)modKd = (T - S) \bmod K,则 TT 刚错过上一班车 dd 分钟,最近的一班车还要等:

  • d=0d = 0 时恰逢发车,等待 00 分钟;
  • 否则下一班车在 KdK - d 分钟后。

两种情形可统一写成 (Kd)modK(K - d) \bmod K

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

仓颉实现

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

main(): Int64 {
    let reader = getStdIn()
    let s = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
    let S = s[0]
    let K = s[1]
    let T = s[2]
    let r = (T - S) % K
    println(if (r == 0) { 0 } else { K - r })
    return 0
}

要点:

  • 题目保证 STS \le T,所以 (TS)modK(T - S) \bmod K 非负,无需处理负数取模。