CF1733E Conveyor

cxqghzj·2024-08-29 09:54·4 次阅读

CF1733E Conveyor

题意#

给定一个 120120 列的棋盘。

一开始 (0,0) 有一个史莱姆,每个地方有一个箭头,最初全部指右。

每一秒做一下过程:

  • 每一个史莱姆朝所在箭头方向移动一格,如果在棋盘之外,则移除该史莱姆,如果两个史莱姆走到了一个格子之上,合并为一个史莱姆。

  • 所有史莱姆前一秒所在的格子的箭头方向改变,向右改为向下,向下改为向右。

  • (0,0) 新增一个史莱姆。

q 次询问,每次询问 t 时刻点 (x,y) 是否有史莱姆。

Sol#

注意到无论如何都不会出现合并史莱姆的情况,因为若当前 (x,y) 有一个史莱姆,那么该史莱姆一定是在 t(x+y+1) 时出现的。

对于每一个位置考虑,注意到所有经过当前格子的史莱姆为 S,那么一定有 S2 个史莱姆去了右边的格子,剩下 S2 个史莱姆一定去了下面的格子。

那么现在的思路就很显然了,考虑设 fi,j 表示点 (i,j) 经过了的史莱姆个数。

事实上,我们只是对于每个点的史莱姆个数做了一个前缀和,因此判断 t 时刻是否有新增史莱姆,直接判断 ft,i,jft1,i,j 是否相同即可。

这样还有一个问题,我们如何知道当前哪些史莱姆应该停止不移动下去。

这个问题很显然,我们只需要保证当前询问的 (x,y) 点正确即可,因此只需要考虑走的步数 x+y1 的史莱姆即可。

复杂度:O(1202q)

posted @   cxqghzj  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示
目录