【A】The Lost Ship in the Sky

Exercise

容易发现,操作次数就是 \(\operatorname{LCM}(l_i)\),其中 \(l_i\) 为所有的置换环大小。那么,对于可能的答案 \(X=\prod p_i^{a_i}\),我们构造 \(l_i=p_i^{a_i}\),对于剩下的我们补足 1,则 \(\sum p_i^{a_i}\le n\) 即为判定的充要条件,我们容易使用 \(O(n^2)\) 背包维护。

CF1896D Ones and Twos

我们考虑,讨论极长的 \(2\) 前缀和 \(2\) 的后缀长度分别为 \(L,R\)。设全部的和为 \(S\),令 \(d=S-x\)

  • \(d<0\),不合法。
  • \(d< 2\min(L,R)\),也不合法。
  • 否则我们可以证明若存在 1 一定合法。

gym105949L

对于 \(\max-\min\) 这类东西,我们可以转化为 \(\frac{1}{2}(|occ(A)-occ(B)|+|occ(A)-occ(C)|+|occ(B)-occ(C)|)\)

那么做前缀和后,我们容易计算。

qoj1250

我们考虑对于选出了一些 \(A\) 中的点集 \(S\),令他们的后继集合为 \(T\),则 \(\sum_{u\in S}a_u\le \sum_{u\in S}b_u\)。考虑按照轮廓线描述,那么我们可以一层一层做,复杂度 \(O(A(B+C)\binom{B+C}{B})\)

qoj7126

我们可以设 \(f_{u,i,j}\) 表示 \(u\) 子树内最浅的 control point 离 \(u\) 的距离为 \(i\),最深的 special point 离 \(u\) 的距离为 \(j\),那么我们可以做 dp。
但是我们注意到,若 \(i,j\) 之间不能互相满足,则我们可以丢掉这个 control point,因为满足了 \(j\) 的 control point 一定比 \(i\) 优,那么我们可以用前缀和优化做到 \(O(n^2)\)

P5999 [CEOI 2016] kangaroo

使用连续段 dp,从小到大加入 i。

  • 对于 \(i\ne s,t\),则它要么新开一个段,要么将两个段合起来。
  • 对于 \(i=s/t\),我们一定要放到首/尾。则,我们需要在上面的转移中减去固定首尾后的系数。

P7559 [JOISC 2021] IOI 熱の感染拡大 (Day1)

将初始感染者的位置当作原点,则所有感染者的位置满足:\(|x|+|y|\le t\)
然后你发现,除了对角线上的人,其他人的方向都是固定的。
为了确定对角线上人的朝向,我们暴力枚举初始感染者 \(t=1\) 在哪里,于是我们就可以确定所有人的方向,然后去做模拟即可。
方便写代码,可以旋转坐标系使得将初始感染者都在往同一方向走。然后我们转移的时候先更新第一个点,在这个决策点被优先队列取出的时候才加入下一个决策点。
那么这个题可能拿链表维护会比较好。

AT_joisc2017_c 手持ち花火 (Sparklers)

我们容易想到可以二分速度,则我们转判定问题。
然后我们考虑一个贪心,对于 K 左右两边的,一定是往 K 跑,然后他们可能会叠在一起,当 K 的棒棒熄灭后,有人继续点亮,也就是每个时刻只有一根棒棒是亮的。

那么现在我们相当于:K 不动,每次你选择左/右边的人以 2v 的速度往 K 走,走到 K 的人以后可以给 K 续命。

也相当于是你有左右两个数组,然后你选择取左边还是取右边,他的代价为 \(T-\frac{dis_i}{2v}\),我们初始金币数量为 0。要求:任意时刻,金币数量不能为负数。
那么我们不妨考虑对某一侧,我们一直取他,直到本次收益和为正。两边取较大的组,即可贪心。考虑最后存在某个后缀不能分进组,我们时光倒流做一遍即可。

CF983D Arkady and Rectangles

扫描线,然后某个颜色是当前存在的,需要满足他是某个根到叶子的路径最大值。用 \(A_u\) 表示节点 \(u\) 到叶子上的最大值的最小值,用 set 去维护当前节点的最大值,我们就可以维护插入的操作。
删除操作,可能存在某个子树内的点,他会成为新的最大值。注意到每个颜色我们只需要关注他第一次被看到,于是我们可以再用一个 set 维护当前节点没有被看到过的颜色,设其中最大值为 \(B_u\),则我们需要找到 \(u\) 子树内的某个 \(v\),满足 \(B_v>A_v\),且 \(B_v\) 最大,他有可能成为当前被看到的颜色。
set 只需要查询最大值,支持插入删除,不妨使用可删堆即可。
均摊 \(O(n\log^2 n)\)

P10008 [集训队互测 2022] Range Minimum Element

首先你容易发现我们只需要求出 \(c\le n\) 的答案,其他更大的可以被计算出来。
构造双射:\(a_i=\max_{i\in[l_j,r_j]}b_j\)
那么我们可以设 \(f_{l,r,c}\) 表示值域在 \([1,c]\)\(a_{l-1}=a_{r+1}=1\) 的答案。枚举第一个 1 在哪里,则有转移 \(f_{l,r,c}\leftarrow f_{l,p-1,c-1}\times cov_{l,p-1}\times f_{p+1,r,c}\)
其中 \(cov_{l,r}\) 表示 \([l,r]\) 是否可以被 \([l_i,r_i]\in [l,r]\)\(b\) 覆盖。注意可能不存在 1。

最后拉差即可,复杂度 \(O(n^4)\)

posted @ 2025-10-13 15:51  TallBanana  阅读(13)  评论(0)    收藏  举报