Atcoder 题目选做(一)
1. [ARC080F] Prime Flip
数轴上有
个点 的颜色是黑色的,其余颜色为白色。 每次操作可以选连续
个位置反色,其中 必须是奇素数。 求全部位置染白的最小操作次数。
数据范围:
。
考虑差分,变成
- 若
为奇素数,则 次操作即可还原这两个数。 - 若
为偶数,则 次操作可以还原: 时根据哥德巴赫猜想拆成两个奇素数之和,否则拆成 。 - 若
为奇合数,则 次操作可以还原,因为你要把 表示成若干个奇素数的和或差,那么操作次数必定与 同奇偶,构造很 trivial。
可以证明答案一定是把这些
先考虑只有后两种,那么同奇偶的点内部优先匹配,至多一组
然后考虑第一种操作,显然这种操作的点越多越好,注意到
时间复杂度
2. [ABC251Ex] Fill Triangle
给定
,以 个值相同的区间的形式表示。 定义
,求 。 数据范围:
。
先考虑
因此对于一个区间相等
因此我们只要求组合数前缀和
可以用 Lucas 定理维护,设
预处理
时间复杂度
3. [ARC087E] Prefix-free Game
定义一个 01 串集合
是好的:
- 所有元素长度在
之间。 - 对于所有
, 的所有前缀不属于 。 给定初始值
,Alice 和 Bob 轮流往 中插入一个字符串,谁不能保持 是好的就输了,求赢家。 数据范围:
。
先建立 Trie 树,那么 Trie 上的点和所有叶子的子树不能选。
那么剩下来的就是一些一度点的空子树,显然这些子树之间的博弈是互不影响的,求出每个子树的 SG 值后异或起来即可。
我们只要求
打表发现
时间复杂度
4. [AGC006F] Blackout
给定
网格,其中 个位置是黑色,按如下方式操作若干次:
- 若
是黑色,则令 为黑色。 求最多的黑色网格数量。
数据范围:
。
考虑把每个黑格子看成
继续观察:对于一个大小为
接下来考虑
注意特判整张图只能二染色的情况,对于每个连通块分别处理即可,注意每次要处理完整个弱连通块,因此考虑加入反向边。
时间复杂度
5. [ABC252Ex] K-th beautiful Necklace
给定
个球 种颜色,每个球有权值 ,对于一种方案,选出每种颜色的球各一个,权值为选出球的权值异或和,求第 大的权值。 数据范围:
。
此时最大的方案数
因此可以考虑 Meet-in-Middle,把所有颜色分成
那么我们可以爆搜得到每个颜色集合对应的权值集合。
然后把
时间复杂度
*6. [ARC139F] Many Xor Optimization Problems
给定一个长度为
,值域为 的序列,求所有子集的最大子集异或和的和。 数据范围:
。
在介绍该问题做法前,我们先介绍一下二项式系数的拓展形式,q-binomial。
具体来说,q-binomial 依如下形式定义:
容易发现
证明方法是数学归纳法,然后展开观察系数。
这也为我们理解 q-binomial 的组合意义提供了一种方式:对于所有
根据组合意义,我们可以证明如下恒等式:
除去暴力展开,该结论可以通过组合意义理解,先通过对称让 q-binomial 求所有格路
然后枚举
然后回到原题上来,我们分步枚举,先枚举线性基大小
那么把原问题分三部分考虑,先求最大异或和的期望,显然自由元必须在其中,其他位在或不在概率均等。
因此这部分答案是
然后考虑
对于剩余的数码,把每个向量写成高斯消元后的标准型,这个过程是一个双射。
容易发现只有
因此我们得到:
把三个式子拆开分类讨论。
先计算第一部分
考虑格路计数的模型,对于
然后计算第二部分
考虑容斥,先把求和号里的式子当成
那么第二部分可以看成选
但注意,对于
最后计算第三部分
枚举
最后把三个式子全部带入得到:
最终按照式子计算即可。
时间复杂度
7. [ABC255G] Constrained Nim
给定
堆石子的 Nim 游戏,有 个限制表示:当前堆大小为 时不能取 个石子,求最终谁必胜。 数据范围:
。
考虑算 SG 函数,我们需要特殊处理
首先如果一个
因此用 map
存每个突变点
然后考虑突变点,我们要在
观察一下函数图像可以发现,对于所有非突变点,他们的 SG 函数值单调递增(这是显然的),且中间不存在断点。
因此 map
维护。
时间复杂度
8. [ARC140F] ABS Permutation Count
给定
,对于所有 求恰有 个 满足 的排列数量。 数据范围:
。
先考虑
先考虑
而
进行一次卷积即可,注意
对于一般的情况,递归处理
那么最终的生成函数为
时间复杂度
9. [ARC141D] Non-divisible Set
给定
个数的集合,值域 ,对于每个 求出是否存在一个大小为 的子集包含 且任意两个数不为倍数关系。 数据范围:
。
注意到值域很小,因此考虑每个数的奇数部分,即把每个数拆成
对于同一个
对于
具体的构造直接让因数从小到到大贪心取,倍数从大到小贪心取即可。
因此对于每个
时间复杂度
10. [ARC141E] Sliding Edge on Torus
给定
个点,标号 , 次操作对于所有 与 连边( )。 每次操作后求图中连通块数。
数据范围:
。
首先把
对于
因此用带权并查集维护当前列中的点到连通块的根中的点的映射,以及每个连通块内所有边长的
时间复杂度
*11. [ARC141F] Well-defined Abbreviation
给定字符串集合
,对于一个字符串 ,每次可以删去 中的一个 子串直到不能操作,判定是否存在一个 使得最终停止时的 不唯一。 数据范围:
。
考虑什么时候
当然前提条件是
进一步观察这个条件,我们发现需要对于
因此我们可以考虑贪心,对
这个过程结束后得到的串如果非空那么原题有解,否则保留
此时任意两个字符串没有包含关系,然后我们只需判定有无这样的
然后对剩余的串建 AC 自动机,枚举
时间复杂度
12. [ARC142D] Deterministic Placing
给定
个点的树,在树上放若干棋子:定义一次操作会把每个棋子移动到他的一个邻居上,使得每条边至多被经过一次,移动后每个点上至多一个棋子。 求有多少种初始放棋子的方法,使得可以该局面可以被操作任意次,且每次操作方案都唯一。
数据范围:
。
手玩棋子移动的过程,先考虑树是链的情况,此时只有一个端点上没有棋子,然后其他棋子在这条链上往返运动。
然后考虑一般树的情况,容易发现一个合法局面依然能被分解成若干条链,并且链需要是有向的,设其指向空端点。
进一步的,对于一种合法的有向链剖分,链尾不能相邻,否则可以合成一条两端都是空节点的链,链头不能相邻,否则一次操作后就变成上面的情况,且链头或链尾不能和链中间节点相邻,否则中段节点可以跟另一条链尾。
那么可以设计 dp:
时间复杂度
*13. [ARC142E] Pairing Wizards
题目大意
给定
, 组限制 ,确定 使得 或 ,最小化 。 数据范围:
。
思路分析
显然
但是题目中的限制不好处理,设
此时
但这个模型有一点不完备:对于一个
但我们发现这是不可能的,首先
因此这样的网络上的最小割就是答案。
时间复杂度
14. [ARC142F] Paired Wizards
有两个变量
以及 ,他们可以分别执行两种操作之一:
- 操作一:
或 。 - 操作二:
或 。 接下来有
秒,每秒给定 ,你要在如下两种策略中选一项执行:
- 令
执行操作 , 执行操作 。 - 令
执行操作 , 执行操作 。 求最终
的最大值。 数据范围:
。
先转化代价计算:我们只考虑一个人所有操作二的时刻
设所有
考虑对所有操作分类讨论:
:这种操作没有选择空间,直接统计入 。 :这种 没有选择空间,先计入 ,然后枚举选择二操作的次数,即对 的贡献确定,此时我们只要最大化 ,即选择时间最靠后一段操作。 :类似上面,先统计 ,然后枚举 ,选择操作的一段后缀。 :此时同上,枚举选择 的操作次数,同上,此时依然会选择一段后缀操作。 :此时对 的贡献一定,我们只要枚举几个 几个 即可。
此时暴力枚举四类操作,复杂度
考虑分离过程:例如
然后我们枚举最后两类操作的选择次数,那么我们可以直接得到外界
时间复杂度
由于代价函数满足四边形不等式,可以用分治或其他手段优化求值过程,或许可以做到
15. AND OR Equation
题目大意
给定
,求有多少序列 满足值域 且对于所有 都有: 。 数据范围:
。
思路分析
考虑逐位构造,考虑从
对于
因此
那么可以考虑 dp,
我们要从
根据组合恒等式能得到答案为
时间复杂度
16. [ARC144E] GCD of Path Weights
给定
个点 条边的 DAG,点有点权,有一些点权不确定,找到一种方式最大化所有 路径点权和的 。 数据范围:
。
先删除所有不在
设答案为
把图看成无向图,只要处理所有环的
用可持久化并查集维护
时间复杂度
*17. [AGC008F] Black Radius
给定一棵
个点的数, 定义为距离 不超过 的点构成的集合,给定一个集合 ,求对于所有 共有多少本质不同的 。 数据范围:
。
首先考虑
以
此时删掉
然后考虑
换根 dp 维护即可,记得最后加上全集。
时间复杂度
*18. [ABC257Ex] Dice Sum 2
给定
个骰子,第 个骰子代价为 ,以均等概率得到 ,你可以购买 个骰子,获得的权值是这些骰子显示面的数字之和的平方,求最大期望收益。 数据范围:
。
先考虑如何刻画选择
根据经典结论,平方的期望相当于
展开得到:
而
记
枚举
进一步,我们不需要使得
即对于所有大小为
此时枚举量为
因此令
时间复杂度:
19. [AGC017E] Jigsaw
给定
个积木,每个积木中间高为 ,左右两边离地 ,积木块高度为 ,求能否把这些积木拼在一起使得没有积木块悬空。 数据范围:
。
考虑对每个积木设定特征值,其左特征值在
容易发现
需要注意一个特殊情况就是
对于同一弱联通块中的点,满足
考虑选一个
,满足 ,考虑一条边 ,若 ,显然 ,找到出边继续访问,直到找到一个 的点结束。 考虑
的路径,其中除 的点 都为 ,删掉这条路径,显然会形成若干个连通块,且每个连通块至少有一个节点 在 上,若这个连通块没有 的点,则可以把这个连通块里的所有边连成一个 的欧拉回路并到 的路径上,否则数学归纳法可证这个连通块可以独立分解。 证毕。
注意特判没有出边入边的点,对每个弱联通块分别处理即可。
时间复杂度
*20. [ARC145E] Adjacent XOR
给定
,每次操作可以选定一个 ,对于所有 同时操作 。 在
次操作内将 变成 。 数据范围:
。
反转操作过程,变成每次对
那么合法的一个必要条件就是
由于
对于单个
设
根据上面的假设,
因此顺序插入时,若
逆序依次操作,每次建立线性基求解即可,操作次数
时间复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】