- 代码源挑战赛 Round 66
代码源挑战赛 Round 66 题解
- @ 2026-6-22 20:51:38
T1
100%
满分当且仅当实际得分等于满分,即判断 。
- 若 ,输出
Accepted; - 否则输出
Unaccepted。
时间复杂度 ,空间复杂度 。
T2
100%
按照题意依次处理每一件装备,并始终保存当前战斗力对 取模后的值 。
-
遇到
A x,令 -
遇到
B x,令
每次操作后输出 即可。乘法计算的中间结果需要使用 long long。
时间复杂度 ,空间复杂度 。
T3
100%
怪物是否能被击败取决于它出现时的战斗力,因此必须按照时间顺序处理怪物,而不是按照输入顺序处理。
将每个怪物保存为三元组 ,按照 从小到大排序。随后依次处理:
- 如果当前战斗力 ,则击败该怪物,令 ;
- 否则战斗力不变。
所有 互不相同,因此排序后不会出现同一时刻的处理顺序问题。
时间复杂度 ,空间复杂度 。
T4
40%
当 时,可以枚举每天进行的三种操作,并检查游戏天数、游戏是否连续以及做题专题是否交替,取所有合法方案的最大收益。
时间复杂度 。
100%
“相邻两道题目的专题不同”中的两道题不一定在相邻两天,因此只记录前一天做了什么是不够的。我们需要同时记录:
- 最近一次刷题的专题;
- 前一天是否在玩游戏。
设 表示已经安排完前 天、恰好玩了 天游戏时的最大收益,其中:
- :最近一次刷题的专题, 表示套路题, 表示思维题, 表示还没有刷过题;
- :前一天是否在玩游戏。
初始时只有:
其余状态均为负无穷。
考虑第 天,设其收益为 ,从每个合法状态进行下面的转移。
1.玩游戏:只有前一天没有玩游戏,即 时才可以选择:
$$dp_{i+1,j+1,t,1}=\max(dp_{i+1,j+1,t,1},dp_{i,j,t,0}) $$最近一次刷题的专题 保持不变。
- 刷套路题:只有 时才可以选择:
- 刷思维题:只有 时才可以选择:
处理完 天后,在所有 中取最大值即可。
时间复杂度 ,空间复杂度 。
T5
100%
先固定所有人的总安检顺序。由于 个人互不相同,总顺序共有 种。
对于一个固定的总顺序,设某一批有 个人。该批需要从 个不同安检口中选择 个,并且不记录人与安检口之间的具体对应关系,因此这一批的方案数为 。
接下来只需要统计:将固定顺序的前 个人划分成若干个连续非空批次,每一批大小不超过 ,且大小为 的批次带有 种选择时,共有多少种方案。
设 表示固定总顺序后,安排完前 个人的方案数。初始值为:。
枚举最后一批的人数 。最后一批之前的 个人有 种安排,最后一批有 种安检口集合,因此:
最终答案为 。
时间复杂度 ,空间复杂度 。
T6
100%
对于一次 2 l r k 操作,如果选择第 个专题,那么从它的 道题中选择 道的方案数为 。由于一次集训只能选择一个专题,所以查询的答案是:
问题转化为:维护序列 的区间加,并查询区间内组合数之和,其中 。
记 。对于线段树的每个结点和每个 ,维护:
其中 ,所以 就是该结点对应的区间长度。
合并两个儿子时,将对应的 分别相加即可。查询 2 l r k 时,查询区间的 即为答案。
如果一次修改使 变为 ,由根据范德蒙德卷积有:
$$\binom{a_i+y}{j} =\sum_{t=0}^{j}\binom{a_i}{t}\binom{y}{j-t} $$对结点区间内的所有 求和,得到修改后的维护值:
因此,对一个完整覆盖的线段树结点,可以先求出:
然后在 时间内更新整个 。计算新的 时必须使用修改前的各个 ,可以复制一份旧数组后再转移。
下传标记时,分别对两个儿子的 值执行同样的操作即可。
每次修改和查询的时间复杂度均为 ,空间复杂度为 。