[R73B] 爱吃白饭的大肥鱼2
- 难度 入门
- 时限 1s
- 空限 256m
- 模拟
数据规模:,。
思路
直接按题意模拟。始终维护大肥鱼覆盖的区间 和成功捕食次数 ,初始 、。顺序处理每条小鱼出现的位置 :
- 若 :被吃掉, 加一,区间向左右各扩张一个位置,即 、;
- 若 :整体左移,、。由于 且 ,必有 ,左移不会越过边界;
- 若 :整体右移,、。同理 且 保证 ,右移也不会越界。
因此只有吃到鱼的扩张需要钳制到 ,平移天然合法。 只小鱼依次处理完毕,输出 和最终的 即可。
复杂度
时间 ,空间 。
仓颉实现
查看仓颉实现
import std.convert.*
import std.env.*
main() {
let reader = getStdIn()
let nm = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
let m = nm[1]
var l = nm[2]
var r = nm[2]
var cnt: Int64 = 0
let a = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
for (x in a) {
if (x >= l && x <= r) {
cnt += 1
if (l > 1) {
l -= 1
}
if (r < m) {
r += 1
}
} else if (x < l) {
l -= 1
r -= 1
} else {
l += 1
r += 1
}
}
println("${cnt} ${l} ${r}")
}