DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

拿走L

返回题目

题解

每个 L 形都会取走某一列的两个格子以及相邻列的一个格子。因此每一步都会产生空列,将左右两侧分成互不影响的独立游戏。

在空列分隔出的每个区间中,只有两端的列可能仅剩一个格子,内部各列始终剩下两个格子。任何操作之后,这个性质仍然成立。

设区间内剩余格子数为 kkk。每一步都会留下大小为 aaa 和 k−3−ak-3-ak−3−a 的两个区间。反过来,每个 0≤a≤k−30\le a\le k-30≤a≤k−3 的划分都能实现:按列从左到右排列剩余格子,任意连续三个格子都由某列的两个格子与相邻列的一个格子组成,因此取走前 aaa 个格子之后的三个格子即可。其他朝向不会产生额外的大小组合。

所以区间的 SG 值只取决于格子数,记为 G(k)G(k)G(k)。有

G(0)=G(1)=G(2)=0,G(0)=G(1)=G(2)=0,G(0)=G(1)=G(2)=0,

且当 k≥3k\ge3k≥3 时,

G(k)=mex⁡{G(a)⊕G(k−3−a)∣0≤a≤k−3}.G(k)=\operatorname{mex}\{G(a)\oplus G(k-3-a)\mid 0\le a\le k-3\}.G(k)=mex{G(a)⊕G(k−3−a)∣

其中 mex⁡\operatorname{mex}mex 是集合中未出现的最小非负整数,⊕\oplus⊕ 表示按位异或。

初始时只有一个包含 2N2N2N 个格子的区间。若 G(2N)≠0G(2N)\ne0G(2N)=0,输出 YES,否则输出 NO。

令 MMM 为输入中最大的 NNN。预处理到 G(2M)G(2M)G(2M) 需要 O(M2)O(M^2)O(M2) 时间和 空间,此后每个测试用例只需 时间。总时间复杂度为 ,包含输入的空间复杂度为 。

子任务 1 满足 N≤10N\le10N≤10。用位掩码表示 2N2N2N 个格子的状态,枚举所有合法 L 形并进行记忆化搜索。缓存每个不同 NNN 的答案后,对于 K=max⁡N≤10K=\max N\le10K=maxN≤,时间为 ,空间不超过 。子任务 2 使用上述 SG 递推。

Solution written by GPT

0≤
a≤
k−
3}.
O(M)O(M)
O(M)
O(1)O(1)O(1)
O(M2+T)O(M^2+T)O(M2+T)
O(M+T)O(M+T)O(M+T)
10
O(K4K+T)O(K4^K+T)O(K4K+T)
O(4K+T)O(4^K+T)O(4K+T)