[R16B] 两个按钮
- 难度 入门
- 时限 1s
- 空限 512m
- 数学
数据规模:,,,。
思路
设按了 次 按钮(),则 按钮按了 次,总分 。要求它等于 ,即
当 时,解出 ,只需检查它是否为 内的整数;当 时,总分恒为 ,直接比较 与 。
复杂度:每组时间 ,空间 。
仓颉实现
import std.env.*
import std.convert.*
let reader = getStdIn()
func solve(): Unit {
let abnk = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p => Int64.parse(p) })
let a = abnk[0]
let b = abnk[1]
let n = abnk[2]
let k = abnk[3]
var ok = false
if (a == b) {
ok = (k == n * a)
} else {
let num = k - n * b
let den = a - b
if (num % den == 0) {
let i = num / den
ok = (0 <= i && i <= n)
}
}
println(if (ok) { "YES" } else { "NO" })
}
main(): Int64 {
let t = Int64.parse(reader.readln().getOrThrow())
for (i in 0..t) {
solve()
}
return 0
}
要点:
- 除法的整除性用
num % den == 0判断;仓颉中负数取模的符号跟随被除数,这里只需要判断是否为 0,不受影响。 a == b时公式退化,单独处理。