2022.04 学习记录
04.01
各种订正。
04.02
各种订正。
「FJOI2021」加法方程 (equa)
每次查询 是不变的。由于合法方案字母总数不超过 ,爆搜预处理 中每个字母对应的取值,对于没出现过的值新增编号占位,把状态 hash 起来。每次查询算出对应编号查 hash 表即可。这里用自然溢出没有被卡。
「FJOI2021」外星飞碟 (ufo)
的递推式与 EGF 的卷积相似,考虑从 与 的 EGF 入手。
记 ,。由 的递推式可得:
则
由 的递推式可知:
则
答案即为 。
使用 FJOI 必备的 光速阶乘算法即可通过本题。
04.04
「JOISC 2020 Day4」首都
如果两个同色点要在一个连通块内,则其路径上的所有点也需在连通块内。规定连边 表示若 在某一连通块内,则 也必须在其中。对连出的图求强连通分量,则答案就是最小无出度强连通分量的大小。连边的形式是点向路径连边,树剖优化。
04.05
「WC2019」I 君的商店 (shop)
由 得到启示:如果可以在 的代价内将序列排序并找到一个 ,则可以用 的代价求出答案——这只需要简单的二分,最后剩下一个元素利用奇偶性判断。
考虑三个元素 ,不妨设 (用 的代价得出),讨论 与 的关系:
- ,则 ,换下一个数作为 ;
- ,则 ,把 加到一个序列的末尾,令 ,再换一个数作为 。
由此可以得到一些确定为 的数、一个单调不降的序列,以及最后剩下的一个数。而在剩下的数和序列末尾中,必然有一个是 。这样就可以二分了。同样利用奇偶性,不难判断出剩下的数和二分剩下的数。
调试问题:二分的写法和边界。
「JOISC 2020 Day2」变色龙之恋
尝试构造图 ,满足:
不难发现满足 的二元组 只有三种可能:
- 喜欢 ,且 不喜欢 ;
- 喜欢 ,且 不喜欢 ;
- 同色。
那么任意结点在 中的度数只能为 或 。对于结点 ,若其度数为 ,则答案已经确定;否则,将与 相邻的三个结点 拿出来两两与 一起询问,只有 ,且对于一个结点每条边只会被覆盖一次。因此对每个结点统计一遍,被覆盖超过一次的即为答案。
问题在于如何建出这张图。考虑逐个加入结点 并确定其连出的边。首先 一定是二分图,因此一定可以将其分成两个极大独立集,并且两个独立集分别对应两种性别,这个可以使用带权并查集维护。对两个集合分别考虑(因为性别未知)。若 与集合 中没有边,则 。由于最多只有三条边,因此可以分治求出每条边。
查询次数 ,时间复杂度 。
「2022-03-22 省选模拟赛」星际广播 (radio)
对三种颜色分别考虑,显然可以 dp。wqs 二分优化。
「2022-03-22 省选模拟赛」星际联邦 (federation)
阶循环矩阵 () 的行列式,有结论:记 ,则 ,其中 为 次单位根。证明可以将 右乘范德蒙矩阵 后对比两边行列式系数得出。实现时,一次 DFT 即可求出所需的单位根处点值。
对于本题,不难想到加入新结点为根后运用矩阵树定理。构造出基尔霍夫矩阵,发现其为循环矩阵,套用上面的结论即可。
04.06
「2022-04-06 省选模拟赛」方程 (equation)
化一下式子发现只和 有关,转化为统计每种 的数量,循环卷积和求出离散对数后循环卷积即可。
「JOISC 2020 Day4」治疗方案
从左到右考虑所有区间,需要不间断地覆盖。设 表示考虑前 个区间的最小花费,则 可以从满足 的 处转移过来。这个方程的转移顺序十分不明确,但是可以用类似最短路的方法更新,对绝对值分类讨论,可以把式子拆成与 相关的和与 相关的,线段树优化建图;类似「NOI2019」弹跳的做法,每个区间只会被更新一次,线段树分别维护。
04.07
「2021 集训队互测」整数
先对所有元素操作一遍,得到一个全 序列。按 依次操作 :
- 若没有产生进位,表现为 恰好加一,无法得出信息;
- 否则,可以通过减少的 的数量知道 与上一个进位的位置(特殊地,初始为最高位)间的距离。
重复如上步骤,每轮至少能确定一个数。将排列随机打乱,期望询问次数与随机排列期望最长上升子序列长度同级,故期望询问次数与期望时间复杂度均为 。
调试问题:没有注意到每一轮之后,从第 位开始逐渐加 ,因此需要特判第一次进位的距离。
CF675E Trains and Statistic
对于每个 ,其无法直接到达的地方必然选择之后 最大的 走。记 表示 的答案,从其后的最大值处转移过来。
[HNOI2011] 卡农
见寒假的学习笔记 [HNOI2011] 卡农
04.08
带表妹。
04.09
CF923E Perpetual Subtraction
记 表示第 轮时, 为 概率。有转移
记 ,则
似乎很难有进一步的推论,但是 很容易让人联想到积分:
积分下限是 ,这很不好处理,尝试把它变成 。令 :
于是
现在只需要实现 与 的相互转化。先考虑如何从 推到 :
即
将组合数展开后是差卷积的形式。从 推回 只需要套上二项式反演即可。
[SDOI2011]黑白棋
考虑什么时候先手必胜。由于白色不往左,黑色不往右,于是等价于 堆石子,每次可对 堆石子取走任意数量。这是 nim-k
游戏,先手必胜当且仅当:
- 把石子数量写成二进制数,每位分别相加,若存在一位满足所有石子在这位之和
补集转化,求所有位和都为 的方案数。逐位考虑,设 表示考虑前 位,所有石子和为 的方案数。枚举这一位上有多少石子得到转移。统计答案时,相当于将剩下的石子放到 个段里,经典插板法。
[SDOI2019]移动金币
和 [SDOI2011]黑白棋
十分类似。这道题相当于阶梯 nim 游戏。记第一个台阶层数为 ,则先手必胜当且仅当
- 用奇数层台阶上的石头做
nim
游戏时先手必胜。
于是变成了 nim-k
游戏的特殊情况,套用 [SDOI2011]黑白棋
的 dp 即可。
[SDOI2019]连续子序列
T.M.序列,在很多地方都有出现,性质非常多,本题只需要用到其中一个。由 T.M.序列
的构造过程,可以把相邻的 缩成 ,相邻的 缩成 ,两个相邻的数相同就寄了。枚举第一个从哪里开始,递归下去做,只会用到 个位置。
[ZJOI2016]小星星
子集容斥,求用集合 中编号(可重复使用)的方案数, 树形 dp。就,过了。
[PKUSC2018]最大前缀和
分别记 分别表示集合 中的元素和、考虑 中元素时有多少种排列方式使得最大值为 、考虑 中元素时有多少种排列方式使得所有前缀和 。则答案为 。 是容易 dp 的; 的转移,考虑在最前面加入一个数。
[PKUSC2018]真实排名
分别考虑每个人的成绩变不变,不变的话不能变的是一段区间,变的话必须变的是一段区间。
04.10
「WC2018」即时战略 (rts)
调了一年。
暴力思路:每次选一个点,从已知连通块不断拓展直到拓展到为止。直接上点分树,每轮最多拓展 个点,每轮拓展完类似替罪羊重构。总操作次数 。
链要特别搞一下。
调试问题:重构点分树时,可以用深度判断是否在子树内。
「WC2019」远古计算机 (oldcomputer)
大玄学。
:读懂题。
:有点意思。把斐波那契数列打表出来,jmp
跳到对应行。
:事实上每个点的第二个寄存器是寄的,主要受到线路的制约。对 处理处一条到 任意结点的最短路,按到达的时间顺序输出,经过一些玄学调整可以通过。
:对每个结点记录其在某个时间结点是否被占用,依次跑最短路,按到达的时间顺序输出,经过一些玄学调整可以通过。
注意审题:多次调用一台计算机会寄。
[HAOI2017]方案数
经典模型的稍加改动,和那个网格图上障碍点的题十分相似。发现方案数只和 的差有关,预处理每种差的方案数后,容斥 dp 即可。
[WC2020] 猜数游戏
考虑一个元素 能对哪些集合贡献。这需要满足 在集合中,且集合中没有能表示出 的元素。如果能求出元素间的表示关系,计算答案是容易的。分类讨论:
-
,则 只能表示出 个数,暴力预处理;
-
,考虑 关于 的阶 。
引理: 能表示 ,当且仅当 。
结合下文阶的性质 1,2 不难证明其充要性。由此可以把所有元素按阶分类,暴力枚举两数。
简要记一下阶:
对于满足 的正整数 , 定义为最小的 满足 ,那么显然有 。特殊地,当 时,称 为 的原根。求阶可以求出 后用因数试除。
- 当且仅当 时,
04.11
[HNOI2016]最小公倍数
Powerful Number 图。
本质是求两点是否存在两种最大值恰好为查询的数对的路径。我们希望在只加入两种权值都 该询问权值的情况下统计答案,这样就只需求最大值。离线,对边按 排序后分块,对询问按 排序。每块考虑 在当前块范围内的询问。前面的块按 排序,每次能产生贡献的是一段前缀,单指针维护;当前块内暴力加入,可撤销并查集维护。
调试问题:块边界没处理好。
[HAOI2018]反色游戏
当且仅当每个连通块中都不存在奇数个黑点时有解。
记连通块个数为 ,则初始答案为 。维护点度数和全局奇黑连通块个数,考虑删去点 有什么影响:
- 为割点,则会把一个连通块拆成若干连通块,需要预处理拆完后是否存在奇数个点的黑色连通块;
- 否则,只需考虑其对所在连通块黑点个数的影响。
特殊考虑没连出边的点,对答案没有影响。
调试问题:连通块根节点的割点数量求错。
「2022-02-05 厦门双十联考」区域划分 (divide)
有一些显而易见的无解情况:
- 相邻结点颜色相同;
- 有一种颜色没出现过。
但是找不出进一步的结论,于是大胆猜想剩下情况一定有解并通过构造证明。考虑增量构造,每一条边便增加一个三角形,为此需要维护满足左右相邻点和本结点都异色的结点集合,并支持删除一个结点,使用链表维护。但是这样有一个问题,在某种颜色 只剩下一个点时,这个算法可能将 色点直接删去导致剩下结点无法构造答案,此时特判即可完成构造。
「2021-02-28 联考」询问 (query)
把所有询问离线,每个 单独做。求出每个元素作为第 大值的所有区间(显然总数 )后,相当于矩形加单点查。预处理区间可以排序之后使用链表,从小到大考虑完就删去。
「PR #1」删数
差分数组 ,则每次操作相当于把相邻相同的数删掉一个并把剩下一个 。把所有数按照正负和 分段考虑,显然只有同一段的元素能够缩起来。对于同一段内的元素,我们就只需要考虑 ,那么合并两个数就相当于把两个数删去一个并把剩下一个 ,这样就和 [USACO16OPEN]262144 P
一样了,类似倍增维护出合并出 时所在的位置,多加一个统计答案的 dp 即可。
调试问题:分段边界没清空。
04.12
[HAOI2018]奇怪的背包
拓展一下二元一次不定方程的结论
元一次不定方程 有解,当且仅当
那么记 表示 的集合数量,每次询问的答案即为 。 背包一下就好了。
[HAOI2018]字串覆盖
数据范围明示数据分治。
-
:后缀树上定位到对应结点 SAM 线段树合并二分求出区间中最前的结点,暴力求下一个区间在哪里。 的询问次数不多,暴力跳的总次数不多。
-
:对每种长度分别考虑,倍增预处理跳了 个串后到达的位置及对应左端点下标和。
04.14
学习 PGF,见学习笔记。
[PKUSC2018]星际穿越
从 出发,第一次跳跃能走到 的点,其中 是最大的能走到 的点;从第二次跳跃开始,行动轨迹变得有迹可循:记上一次跳跃能到达的左端点为 ,每次能够跳到 处。这启发我们倍增预处理跳 步后到达的点,顺便维护跳 步代价之和。查询时特判第一步和最后没法跳满的部分。
04.15
「2020-04-21 省选模拟赛」探险队 (expedition)
对反图建以 为根的最短路径树,则被删去的边一定在 的祖先链上。对于一条非树边 ,其能对 以下的所有结点 提供一条从绕开其父边的路径,总代价为 。可以从下往上跳,堆维护每条可行路径,但由于理解错题意对着堆调了一个上午导致我不想再碰它;题解给出了一个比较难想到的做法:记 表示从 出发的答案, 表示发现有边被删后的最优策略下的路径长度,则 ,转移顺序不明确,最短路优化。
调试问题:对题意给出了错误的理解。
「2020-04-03 省选模拟赛」玩具 (toy)
记会随时间增加边权的边为特殊边,则随着 增大,所用的特殊边数量是单调的,且对于使用同样数量特殊边的方案,其所用边集必然相同。于是把询问离线之后整体二分,费用流记录用了几条特殊边即可。
04.17
「JOISC 2020 Day2」遗迹 3
考虑如何从 得到 。从后往前,对于柱子 ,若 在后面的最终高度没出现过,则会保留;否则会一直减到在后面的最终高度没出现为止。
即 的最终高度等于 小于 的初始高度的值中最大的 没在 的最终高度种出现过的值。
不妨先暴力一点,状压后缀没出现过的最终高度的集合。设 表示从后往前考虑到第 个位置, 中的高度没在最终高度中出现过。由于我们并不知道每种初始高度出现过多少次,在这里认为高度相同的两个石柱本质不同,最后除掉 。转移讨论是否被保留:
-
未被保留,记 中极长前缀 长度为 , 中未被选择的位置个数为 ,则这个位置必须填一个 中的数。那么总共有 个数可供选择,其中已被选择的高度有 个(每个被保留的位置恰有一种高度,每个未保留位置的高度也在 中),则转移系数为 ;
-
被保留,枚举该位置的最终高度 ,我们需要保证填入的初始高度能被减到 。记 中 后的极长连续 长度为 ,则转移系数为 (初始高度为 有两种,初始高度 有 种)。
现在需要优化状态。注意到极长前缀 的长度非常关键,设 表示从后往前考虑到第 个数,最终高度的前缀极长连续段为 。转移依然讨论是否保留。未被保留的情况是简单的,转移需要的信息记在状态里,直接转移即可;但对于被保留的情况,此时我们并不知道 后极长连续 的长度,需要稍作调整。
我们只关心极长前缀连续 的长度,因此如果新加入的最终高度 ,我们可以先放着不管,而是在之后某一次加入使得中间都连上时一起加入并统计贡献。说人话,每次转移加入一段连续的数 ,比较类似贡献推迟计算的 trick。这样每次考虑的最终高度都是一段前缀。讨论:
-
加入的数不连续。由于推后计算,直接令 ;
-
加入一段连续的数。枚举加入数的个数 ,即从 。注意我们钦定了这个位置上的最终高度为 。则 上可以选择 个数(考虑方式与状压时相同)。记 为 中保留的位置个数,则在这些位置中还需包含 的元素,方案数为 。但此时我们并没有确定初始高度的方案数,这似乎不好快速计算。这些数的初始高度显然在 这个长度为 的区间中,这就意味着这个方案数与 没有关系,不妨先记作 。于是得到转移 。
遗留的问题是 的计算。明确一下 的定义:填入 个在 中的数使得最终高度恰为 的排列。称满足这一条件的填入方案合法,则一种填入方案合法当且仅当对 ,填入的数中 的数不超过 个。
再做一个 dp,记 表示考虑 种初始高度,填入 个位置的方案数,则 。转移考虑新加一种初始高度,枚举填了多少个():。只需保证 即可满足合法性。
时间复杂度 。
04.18
「JOISC 2020 Day2」有趣的 Joitter 交友
双向边连接形成的连通块会被缩成团,直接维护这个团。需要维护的信息有:团中元素的集合 、连向该团的团的集合 、该团连向的团的集合 、连向该团的点集 ,则一个团的贡献为 。连边时启发式合并缩团,可能产生连锁反应,类似 bfs 队列维护。
调试问题:写了假的启发式合并,遍历了大的集合。
「NOI2019」回家路线
式子看着就很斜优。对每个地点维护斜率单调队列,按时间枚举事件(到达、出发),到达时尝试加入队列,出发时转移。
04.19
「NOI2019」I 君的探险
暴力
枚举每个点操作,若操作后某个点状态改变则有连边。
树()
二分父亲的位置,整体二分。
树(一般情况)
考虑每次删去叶子。令标号变为 。对每个 ,把二进制下第 位为 的拿出来,记录状态改变的点,则可得到所有相邻点编号的异或和 。那么对于叶子,则有 。并且可以通过 次操作判断两点间是否有边,依此逐步迭代。
一般情况
对每个点以 的概率随机修改,记修改的集合为 ,状态改变的点集为 ,则 中结点与 中结点定有连边。分治,每次随机修改,划分集合。使用 check
减少孤立点个数以剪枝。
与非 (nand)
与非可以表示出所有基本位运算。因此直观来看可以表示的数很多。考虑二进制下两位 ,若对所有数 都有 ,则结果中这两位一定相同,否则互不影响。并查集维护出相同的集合。按照套路,统计答案时从高到低枚举相同的位数。
CF212A Privatization
CF1147F Zigzag Game
04.20
vp 联合省选 Day1,打得比较保守,T2 T3 只写了暴力。
「ExPR #1」乘积(ABC239 Task Ex (Dice Product 2))
表示 时的期望,则 。移项后类似杜教筛递归计算即可。
[ZJOI2019]开关
按 次开关得到目标状态和回到原状态的 EGF 分别为
但我们想要的是期望,也即概率生成函数(OGF)的导数。设 分别为 转为 OGF,则所求即为 。
将 写成 的形式,则有 ,同理设 ,其中 均可背包求出。
那么 ,但直接带入 会有收敛性的问题。分子分母同乘 ,即令 , 同理,则 ,,答案即为
上述讨论在 时进行,实现上不能先进行,需要稍加修改。
[PKUSC2018]神仙的游戏
转化成周期之后,等价于判断是否存在两个不同字符距离为 的倍数。翻转数组后 NTT 求出所有距离即可。
04.21
vp 联合省选 Day2,不知道为什么 T1 做了很久。最后挂了。注意模数。
[PKUSC2018]主斗地
大搜索。没有 状态数不多。然后搜用了多少三带四带,贪心打剩下的牌。
CF1408E Avoid Rainbow Cycles
把集合建点,若数 存在于集合 中则 连边。则题中彩虹环对应新图上的环,求最大生成树。
「2022-02-04 省选模拟赛」游戏
「2022-02-06 省选模拟赛」A
CF762F Tree nesting
04.22
「WC2018」通道 (tunnel)
第一棵树边分治,第二棵树上建虚树,dp 剩下权值的最大值。具体地,类似树上直径的结论,每个点的最优决策点必定为两端点,且可以合并。转移直接枚举合并方式。
也可以点分治,每次选两个大小最小的子树合并。
CF868E Policeman and a Tree
[BalticOI 2021 Day2] The short shank
考虑能传染到每个点的第一个点 ,则对于两个本不会造反的点 , 与 包含或不交。对每个点 ,找到最小的包含它的点 连边,形成一棵树。则阻断一个点相当于减去树上一条到根的路径。即选 条路径使权值和最大。长剖。
CF526G Spiders Evil Plan
条路径等价于 条从叶子到根的路径。显然要以直径两端点为根。长剖,处理每条长链的优先级。为了把 加入连通块,有两种决策:
- 删去最短的长链,连上 ;
- 删去 往上跳到的第一条长链,把那条长链改成连向 。
倍增优化。
「NOI2018」冒泡排序
好排列等价于不存在长度超过 的下降子序列,我只有一个非常不严谨的感性证明。先不考虑字典序的限制,总方案数怎么求。设 表示填了 个数,最大值为 的方案数。转移考虑末尾新加一个数 :
- ,则 必须是未出现过的数中最小的;
- ,随意;
于是 (),即 ,转化为网格图上走路,注意到 ,于是 。
对于字典序的限制,枚举前 位相同,第 位大于。记 ,则相当于从 走到 ,依然搬上卡特兰数即可 计算。
04.23
LOJ #6274. 数字
先考虑判断能否存在 ,。设 表示从高到低考虑到第 位,是否大于 ,是否小于 ,是否大于 ,是否小于 。把这个 dp 数组压成状态, 表示从高到低考虑到第 位, 状态(合法性)为 的方案数。枚举当前位填什么转移。状态数 。
LOJ #6497. 「雅礼集训 2018 Day1」图
设 表示前 个点,路径长度奇偶性为 ,奇黑个数、奇白个数。设加入一个新白点,黑点同理:
-
,则随意连边,;
-
,可以选择钦定/不钦定一个奇黑向其连边,于是新点作为奇偶的方案数应该是相等的。
注意到我们只关心是否存在奇黑、奇白,后两维只需记 。
据此转移即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?