Atcoder 题目选做(二)
*1. [ARC145F] Modulo Sum of Increasing Sequences
给定
,对于所有 求有多少长度为 ,值域 的单调不降序列数组在 意义下的序列和为 。 数据范围:
。
先考虑令序列中的
首先建立二元生成函数,
考虑对第一维进行单位根反演,设
但是
然后对于
还是回到原问题,进一步展开
最后一步由分圆多项式
带入原式得到:
最后一步根据逆用单位根反演得到。
此时前面的二项式系数可以简单讨论根据组合数算出,对单个
时间复杂度
2. [AGC018E] Sightseeing Plan
给三个矩形
,保证三个矩形左下到右上排列,求有多少种路径 满足 。 不同的
或不同的路径均算作不同的方案。 数据范围:
, 。
先考虑点
因此
考虑进入
不妨假设
考虑拆分贡献,分成
时间复杂度
*3. [AGC022F] Checkers
给定
个数 ,每次选定 ,使得 ,然后删掉 ,求最终的向量有多少种可能结果。 数据范围:
。
容易发现我们只关心每个数对答案的贡献系数。
考虑在上述过程中把
我们只关心每个点对答案的贡献系数,每次操作会把
注意到每个点对答案的贡献都是
定义一个点的原符号为,不考虑这个点的所有儿子时,这个点的符号。
具体来说,如果他是父亲的第
最终一个点的符号与其原符号相等当且仅当其儿子数量为奇数。
我们尝试对树的形态进行计数,但这与一个系数组合不构成双射,我们需要对树的形态做出进一步的限制。
对于同一层的两个节点,如果他们有不同的原符号,并且他们都有奇数个儿子,那么把一个儿子移动到另一边不会影响答案,因此我们必须钦定所有有奇数个儿子的点拥有相同的原符号。
考虑最后一层的填法,我们发现该填法有解当且仅当两种符号的差与上一层有奇数个儿子的点的数量一致。
而对于中间的层,我们可以先填原符号,然后把一些点设奇数个儿子来调整符号。
容易发现,根据这样的方式构造树结构,只要最后一层满足条件,任何一组系数都是合法的。
那么我们只要设
考虑原符号与
因此对于下一层我们需要
转移条件为
暴力 dp 即可做到
考虑展开组合数,并分离变量得到:
转为计算
转移条件为
时间复杂度
*4. [ARC146F] Simple Solitaire
定义一个序列
的权值 为 的元素数量,定义一个排列的权值为 ,对于所有 阶排列求权值和。 数据范围:
。
一般来说,涉及
设
因此转移为
考虑组合意义,那么每个
考虑容斥,钦定若干个连续段值域严格下降,对于
转到值域上考虑,用 GF 辅助记录连续下降段中元素个数,
- 如果当前元素是空(不在序列中),那么
。 - 如果当前元素是段尾,那么
,容斥系数在这里处理,其中 是 GF 记录序列大小的占位符。 - 如果当前元素不是段中非段尾元素,那么
。
分治 NTT 维护
记得系数
由于我们要求序列在
时间复杂度
*5. [AGC039F] Min Product Sum
对于一个
的值域 的矩阵 ,定义 表示第 行最小值, 表示第 列最小值。 定义一个矩阵权值为
,求所有矩阵权值和。 数据范围:
。
考虑如何刻画矩阵的权值。
假设我们已知
同理
我们从大到小填每个
具体来说,我们设
-
插入
个被正常的行:即有
个列的值 ,这些交点的 确定可以填 ,每个 种方案, 个列的值 ,这些交点的 确定,可以填 ,每个有 种方案。 -
插入
个被容斥的行:此时
个 确定的交点因为容斥必须填 的数,方案数 ,容斥系数 。 -
插入
个正常的列:意义同上。
-
插入
个被容斥的列:意义同上
根据如上过程分步转移即可,本题轻微卡常,注意实现常数。
时间复杂度
*6. [ARC147F] Again ABC String
给定
求有多少长度为 的 012 串 ,设 中 0/1/2 的数量分别为 ,那么对于任意 都有 ,答案对 取模。 数据范围:
。
可以考虑转成三个棋子互相追及的问题,即 0 棋子在在 1 棋子后面
要求就是每次移动一个棋子一步,共移动
注意到:当两个棋子重合后,下一步如果移动这两个棋子中的一个,我们可以交换他们的名字,使得无论移动哪个都等价,因此这些情况的总数一定是
因此我们只考虑最终状态有两个棋子重合,且此前没有重合产生的方案数。
进一步注意到如果一个方案有重合那么必定对答案无贡献,因此我们可以直接去求最终状态有两个棋子重合的方案数,多算的部分是一个偶数,无影响。
但是三个棋子全部重合的情况被多算了,要减掉两倍的这些情况,但由于减去了两倍因此也无贡献。
总方案数是
而两种棋子重合相当于求
注意到
因此我们可以对
如果
否则
相当于给定一些
直接对
时间复杂度
7. [AGC045F] Division into Multiples
组询问,给 个数字 和 个数字 ,求能将这些数字划分成多少组,使得的数字和都是 的倍数的组尽可能多。 数据范围:
。
首先观察,若
若
同理处理
记
显然如果存在
那么考虑最前面连续的一段:
容易发现这就是辗转相除法的过程,因此所有合法决策构成的等差数列是
观察发现我们选定的所有决策一定在下凸壳的同一条边上,否则把两个决策相向调整可以得到两维都更优的解。
因此我们求出每个等差数列,对每个等差数列在上面二分一个阈值
把所有
时间复杂度
8. [AGC048D] Pocky Game
给定
堆石子,第 堆有 个,先手每次可以从第 堆取 个石子,后手每次可以从第 堆取 个石子,求谁能取完最后一个石子。 数据范围:
。
观察发现答案具有一定的单调性:如果当前局面先手必胜,那么
同理后手必胜的局面令
那么我们可以设
手玩一下策略,如果
否则先手肯定要脱尽可能的时间让后手不断消磨
那么想要后手输掉,需要至少
时间复杂度
9. [AGC056B] Range Argmax
给定
个 的子区间 ,对于一个 的排列 ,定义 表示 中最大值的下标。 求有多少个可能被生成的
。 数据范围:
。
考虑把每组
依次插入
设当前最大值插到了
但是我们还要限制
因此我们可以发现如下的子结构并 dp:
我们设
预处理出
时间复杂度
10. [ARC149D] Simultaneous Sugoroku
给定一个动点
, 次操作给定 :若 则 , 则停止运动, 则 。
次询问初始 时, 会不会停止,什么时候停止,或最终移动到了哪里。 数据范围:
。
注意到值域并不大,因此我们可以维护所有
类似 [Ynoi Easy Round] TEST_100 的思路,我们维护一个区间
注意到每个点只会被删除一次,因此复杂度
时间复杂度
11. [ARC149E] Sliding Window Sort
给定
,对于 阶排列 ,对于 ,我们依次对 升序排序,求有多少个 操作后变成 。 数据范围:
。
首先我们观察到,在
而前面的每个
记
首先考虑
然后考虑
然后观察剩下的序列
然后考虑
首先如果
然后我们在删除后的序列依然可以进行这样的操作,不停操作直到
设原来的
时间复杂度
12. [ARC149F] Rational Number System
给定
,求 中在 进制下字典序第 小的数。 数据范围:
。
考虑把
注意到该 Trie 的 dfs 序即为字典序,因此我们在 Trie 树上 dfs,我们只要求出若干连续的儿子的子树大小之和,最终找到第
又因为这棵 Trie 的 bfs 序即为
因此我们遍历每一层,求出
可以
时间复杂度
13. [ABC260Ex] Colorfulness
给定
,枚举所有 阶排列,对于所有 求 。 数据范围:
。
根据 PGF 的一些理论,先求出权值的分布函数,即
这是经典问题,直接分治 NTT 维护分子分母,最后求逆一次即可。
而
设
同样分治 NTT 维护。
时间复杂度
14. [ABC261G] Replace
给定字符串
, 种操作,第 种可以把 中的字符 变成字符串 ,求 的最小操作次数。 数据范围:
。
考虑 dp,先设
但是
那么进一步,我们可以设
时间复杂度
15. [ABC261Ex] Game on Graph
给定
个点 条边的带权有向图,棋子初始在 ,双方不断移动棋子,先手想最小化棋子移动总路程,后手想最大化总路程,求最终棋子移动总路程。 数据范围:
。
先考虑朴素 dp:
只有第一类转移的时候可以 Dijkstra 维护,每次弹堆就立刻得到
时间复杂度
16. [ABC262G] LIS with Stack
给定一个序列
求其最长的子序列,使得其可以通过单栈排序变成不降序列。 数据范围:
。
考虑模拟入栈过程,对于
因此设
若
时间复杂度
*17. [AGC057C] Increment or Xor
给定一个
的排列 ,每次可以把所有数 后对 取模或每个数异或上 ,构造一种操作方法,使得 。 数据范围:
。
记
可以倒推证明:最终排列满足该性质,且对于两个低
那么说明原本的排列也必须满足
假如
那么我们只要清空每个
只需要一个数据结构维护全局
时间复杂度
18. [ARC150E] Weathercock
给定
个人和 LR 构成的字符串 ,第 个人初始朝向为 。 接下来进行
次操作,每次同时考虑每个人 :
- 如果
朝向左,且他左侧朝向右的人严格大于他左侧人数的一半,那么 转向右。 - 如果
朝向右,且他右侧朝向左的人严格大于他右侧人数的一半,那么 转向左。 求最终所有人转向次数的总和。
数据范围:
。
先考虑
考虑把 R 当成
不妨设
那么我们能得到如下性质:
-
对于一个初始朝向左的人
,他会转向当且仅当 。 -
对于一个初始朝向右的人
,他会转向当且仅当 。
把
那么对于
那么操作一次之后
而对于一个向左的人
因此我们可以得到如下规律:
- 如果
初始向右,那么当且仅当 时转向两次。 - 如果
初始向左,当且仅当 时转向一次。
然后考虑
因此可以直接求解。
时间复杂度
19. [ARC150F] Constant Sum Subsequence
给定值域
的序列 ,构造无穷序列 ,给定 ,求最小的 使得 中包含所有和为 的序列作为子序列。 数据范围:
。
考虑 dp,设
其中
注意到该式子不好优化转移,可以考虑 CDQ 分治。
对于
不妨设
进一步观察到
又因为
而
注意到
时间复杂度
20. [ARC151F] RGB Card Game
给定三种卡牌,两个人分别有
和 张,每次先手打出一张手牌,后手可以选择轮空,或打出同类手牌然后下一轮自己先手, 次询问求最终谁会赢。 数据范围:
。
首先一步显然的操作是如果某种牌后手没有,那么先手一定会先把这种牌打完。
然后我们可以猜测答案本质不同的状态不多,且大多数状态都具有等价关系,记
是否为 以及大小关系。 的大小关系, 与 的大小关系, 的奇偶性。
注意到这些等价类中至少有一种情况可以落入
时间复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探