可能是校内题单题解(20250811)
ARC112E
考虑时间倒流,发现元素的位置只和最后一次对它的操作有关。
我们有一个朴素的 dp,记 \(f_{i,l,r}\) 表示前 \(i\) 次操作左边有效插入 \(l\) 个,右边 \(r\) 个。
但是这个复杂度不足以通过,观察发现可以分步处理 dp:
- 计算有效操作为 \(x \in [1,n]\) 个时的方案
- 计算分配 \(x\) 个操作到左右边的方案
最后能算贡献的只有单调递增的连续段,复杂度 \(O(n^2)\)
ARC201B
梦幻岛宝珠(?)
先考虑钦定体积为 \(W\) 的最大收益。
借助二进制特性,我们可以贪心选择每一位的物品,再将剩下的物品从大到小两两配对,这个可以对每一位直接排序暴力实现。
对于体积不够 \(W\) 的情况,在每一位加入价值为 \(0\) 的物品凑足。
CF2066C
把 \(a\) 数组做前缀异或和 \(s\),则 \(P \oplus Q \oplus R=s_i\),此时可以令 \(P=s_i\),其余两个为 \(j\),状态为 \(f_{i,j}\)。
- 当 \(j=s_i\) 时,有 \(f_{i+1,s_i} \rightarrow f_{i+1,s_i}+3 \cdot f_{i,s_i}\)
- 当 \(j=s_i+1\) 时,有 \(f_{i+1,s_i} \rightarrow f_{i+1,s_i}+2 \cdot f_{i,s_i+1}\)
- 其余是 \(f_{i+1,x} \rightarrow f_{i,x}\)
ARC167C
原问题可以直接 kruskal,通过一些分析,每个点连出的边不会超过 \(2\)(若连 \(3\) 个边必有两个更小的数可以直接连接)
- 先看 \(0\) 个,说明周围的数都比它大,就有 \(A_{n-rnk_i}^{len-1}(n-len)!\) 种(记 \(len\) 为目前区间长度)
- 再看 \(2\) 个,说明存在 \(x < a_i < y\) 且 \(a_x,a_y < a_i\) 且 \(x-y>k\),我们令 \(x-y=z(z \in [k+1,len-1])\),则共有 \(A_{rnk_i-1}^{2}A_{n-rnk_i}^{z-2}(n-z-2)!(2k-z+1)(n-z)\) 个
- 用总数 \((n-1)!\) 容斥出 \(1\) 个的个数。

浙公网安备 33010602011771号