CF1733E Conveyor
题意#
给定一个 行 列的棋盘。
一开始 有一个史莱姆,每个地方有一个箭头,最初全部指右。
每一秒做一下过程:
-
每一个史莱姆朝所在箭头方向移动一格,如果在棋盘之外,则移除该史莱姆,如果两个史莱姆走到了一个格子之上,合并为一个史莱姆。
-
所有史莱姆前一秒所在的格子的箭头方向改变,向右改为向下,向下改为向右。
-
在 新增一个史莱姆。
次询问,每次询问 时刻点 是否有史莱姆。
Sol#
注意到无论如何都不会出现合并史莱姆的情况,因为若当前 有一个史莱姆,那么该史莱姆一定是在 时出现的。
对于每一个位置考虑,注意到所有经过当前格子的史莱姆为 ,那么一定有 个史莱姆去了右边的格子,剩下 个史莱姆一定去了下面的格子。
那么现在的思路就很显然了,考虑设 表示点 经过了的史莱姆个数。
事实上,我们只是对于每个点的史莱姆个数做了一个前缀和,因此判断 时刻是否有新增史莱姆,直接判断 和 是否相同即可。
这样还有一个问题,我们如何知道当前哪些史莱姆应该停止不移动下去。
这个问题很显然,我们只需要保证当前询问的 点正确即可,因此只需要考虑走的步数 的史莱姆即可。
复杂度:。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?