2024年 1月 做题记录
2024.1.16 省选十三连测#10
A. 早八
至少覆盖一个黑点的区间 = 所有区间 - 没有覆盖任意黑点的区间。维护不经过黑点的区间,我们通过遍历颜色段即可维护区间覆盖的贡献。时空复杂度均为 \(O(n\log n)\)。
B. 派对
选出 \(n\) 个点互不共行、列。设第 \(i\) 行选择点 \((i, p_i)\),则 \(p_i\) 构成一个 \(n\) 阶排列。
设 \(S(i, j)\) 表示以 \((i, j)\) 为左下角的右上 2-side 部分。
则题目中第三个限制可以写成:\(\forall i\neq j,i\le p_i\ or\ j\le p_j\)。在图上相当于如果选择点 \((i, p_i)\),则没有 \((j, p_j)\) 使得 \(p_i>j, i<p_j\),即不能选 \(S(p_i-1, i+1)\) 中的点。
可以发现排列 \(p\) 有如下性质:
-
\(p_i\le i+2\)。
假如选择 \((i, p_i(p_i>i+2))\),设 \(a=p_i-1,b=i+1\)。容易发现 \(a<b\)。在去除 \(S(a, b)\) 后剩余可选的 \(L\) 型部分中,竖着的部分可以选择的列有 \(b-1\) 种,横着的部分可以选择的行有 \(n-a\) 种。两者之和 \(=n-1+a-b<n-1\)。一定不够选择剩下的点。
-
不能同时存在 \((i, i+2),(i+1, i+1)\) 或 \((i, i+1),(i+1, i+2)\)。
通过检查容易证明正确性。
于是可以设计 DP。设 \(f_{i, 0/1/2}\) 表示考虑前 \(i\) 行,其中 \(p_i\le i,\ p_i=i+1,\ p_i=i+2\) 的方案数。题目中已经选出的点可以通过钦定某些行列选特定位置从而 ban 掉一些转移来满足。而限制本质不同的位置一共只会有 \(O(m)\) 种。实现矩阵快速幂加速转移即可通过。
2024.1.18
A. 空间饮料站
厉害静态做法:猫树分治?
对分治区间 \([l, mid], [mid+1,r]\) 预处理 \(mid\) 向两边延伸的背包数组。对于包含于分治区间,且过 \(mid\) 的询问,由于询问的是 单点 的值,故可以通过 \(O(L)\) 的代价合并答案,其中 \(L\) 为背包值域大小。
时间复杂度并不正确的正解
线段树上维护区间背包,使用卷积合并。在线段树上如果维护背包数组本身,则单组修改的复杂度为 \(O(L\log L\log n)\) 且常数巨大。但我们发现线段树上其实只用维护背包数组 \(DFT\) 后的结果,这样区间合并可以 \(O(L)\) 完成,单组修改的复杂度就是 \(O(L\log L)\)。
B. 博弈游戏
游戏的决策过程只跟数的相对大小相关。考虑拆贡献。设 \(F\) 为 \(val\) 的一种填充方式。\(ans(F)\) 表示这种填充方式的答案。
对于填充方式 \(F\),枚举一阈值 \(t\) 得到集合 \(g(F, t)=S\),使得 \(F\) 中:
以此计算贡献。
设 \(chk(S)\) 表示判断答案是否在 \(S\) 中产生。
考虑后面一个难算的部分。
容易发现这是一个多项式,插值解决即可。
总复杂度为 \(O(2^n2^L)\)。不能接受。受 meet in middle 思想的启发,我们考虑:是否能将答案做成合并两边的形式?将 \(S\) 按在 \(a\) 中的分布分成三部分:\(L,R,M\)。表示仅在 \(a\) 的前半边出现、仅在 \(a\) 的后半边出现、在 \(a\) 的前后都有出现。\(coef(S)\) 仅跟 \(|S|\) 相关。显然有 \(|L|+|M|\le 2^{L-1}\),\(|R|+|M|\le 2^{L-1}\)。那么我们对这两部分分别做一个 \(DP\),并记录集合大小,即可合并。这样总复杂度为 \(O(2^{2^{L-1}+L})\)。可以通过。
2024.1.21
A. 中忍考试
对于每道题的决策独立。我们仅关心答案是否正确,也即答案本身是 \(T\) 或 \(F\) 其实并没有影响——不妨考虑是否和 \(1\) 号选手选择一样的答案,那么我们仅需要关心其他选手和 \(1\) 号选手的选择是否一样。那么不同类型的题目共有 \(2^{n-1}\) 种。
考虑对于一种类型的题目,计出选择和 \(1\) 号填一样后可能正确答案个数和选择填不一样后正确答案的个数,并选择较大的那个作为这一类题目我们的决策。此时题目就变成了一个形式简单的计数问题。考虑每种类型的问题被 \(1\) 号选手回答对了几个,这其实是一个求多元方程解的个数的问题。容易发现会有 \(2^{n-1}\) 个元,\(n\) 个方程:当 \(n=2\) 的时候直接判断是否有解即可,\(n=3\) 的时候可以枚举其中一个元,再判断剩下的是否有解。
B. 染色游戏
重要性质:题目给出的图是 平面三角剖分图。
-
平面图。
-
平面被图分割成的每一个极小的有限区域都是三角形。
根据四色定理:任意平面图可以被四染色。
当原序列单调时,图可以二染色。
考虑如何判断图是否可以三染色。
重要性质:
-
平面三角剖分图可以三染色,当且仅当其对偶图是二分图。
-
平面三角剖分图可以三染色,当且仅当其奇度数的点都在图的内部。
容易发现固定左端点,右端点越大答案不增。可以使用双指针维护答案变化的位置。
温馨提示:本题包含大量的证明内容并没有被写上去。
C. 01-Game
顺序执行一段区间 \([l, r]\) 的操作可以看成执行一个轮换,我将其表示为 \(P[l,r]\)。\(P^R[l,r]\) 表示从 \(r\) 开始倒着执行操作。
有 \(P[l,r]=P[l,n]*P^R[r+1,n]\)。
则可以考虑
我们不妨设 \(A_i=A*P[l,n]\),\(B_i=B*P[i,n]\)。则计入答案的 \(A_i,B_j\) 需要满足 \(j-i\ge m\)。
这个时候需要我们拆一下贡献形式,我们将 \(A,B\) 看成集合可能更好理解:
容易发现贡献仅和 \(A\cap B\) 相关。故我们仅需要向子集做一个 SOSDP 即可。记录 \(fl_S,fr_S\) 分别表示 \(A\) 取到子集 \(S\) 的小位置和 \(B\) 取到子集 \(S\) 的最大位置。然后判断距离并更新答案。

浙公网安备 33010602011771号