CF 1238 题解

CF 1238 题解

A Prime Subtraction

任何数的因数中都会有质数, 除非他是 \(1\).

因此原题不合法当且仅当 \(b-a=1\).

B Kill 'Em All

首先, 答案有明确的下界: 最右面的怪兽一定要处理. 不断模拟去杀掉当前最靠右的怪兽, 得到的答案就是答案的下界.

是否能取到下界呢? 答案是肯定的. 注意到刚刚的过程可以顺带把所有怪兽都杀掉, 是一种合法的方案.

C Standard Free2play

考虑每到达一个台阶, 首先它可以没有代价的到达下面一个台阶的上方 \(1\) 格, 然后, 考察下面一个台阶的下方 \(1\) 格是否打开, 没有打开就要花费 \(1\) 的代价到达下方.

这个贪心的正确性在于一定想要用较少的钱到达较低处的位置, 在更高的位置显然不优.

D AB-string

一个很好的性质是字符集只包括两种字符.

这样, 不符合要求的串只有 AAAA...AABABB...BBB 以及类似形式.

扫一遍就可以统计了.

E Keyboard Purchase

首先, 字符集大小 \(n\leq20\), 考虑状压.

答案只与相邻两个字符是什么有关, 与原串无关, 考虑转化: 记 \(cnt_{i,j}\) 表示 字符 \(i,j\) 相邻了多少次, 这是好统计的.

特别的, 对任意 \(i\), 令 \(cnt_{i,i}=0\).

现在要给每个字符分配一个位置排列 \(pos_i\), 则答案是

\[\sum_{i=1}^n\sum_{j=i}^n|pos_i-pos_j|cnt_{i,j} \]

我们想要答案最小.

我们设计一个 dp, 首先, 每次转移按照 \(pos\) 顺序加入一个元素, 加入的这一刻我们能够知道 \(i\)\(pos_i\) 是什么 (就等于目前集合大小), 但是其他的都不知道, 这意味着原来的式子不能直接维护, 需要拆掉, 你把元素都按照 \(pos\) 排序后 (也就是转移顺序) 可以得到:

\[\begin{align*} ans&=\sum_{i=1}^n\sum_{j=i}^n(pos_i-pos_j)cnt_{i,j} \\ &=\sum_{i=1}^npos_i(\sum_{j>i}cnt_{i,j}-\sum_{j<i}cnt_{i,j}) \end{align*} \]

这个式子就比较清晰了, 用 dp 去求解这个式子的最小值就好.

\(f_S\) 表示只考虑 \(x\in S\)\(pos_x\) 的贡献, 并且已经决定好它们的 \(pos\), 并且按照 \(pos\) 的顺序加入集合, 则有转移式:

\[f_{S|x}\leftarrow f_S+|S|(\sum_{y\not\in S}cnt_{y,x}-\sum_{y\in S}cnt_{y,x}) \]

由于按照 \(pos\) 序转移, 因此不在 \(S\) 中的元素 \(y\) 会在 \(x\) 之后, 反之则在前面, 因此这个转移式和上面的式子一致.

F The Maximum Subtree

考察每个节点所连子节点情况.

注意到一个节点所有相邻节点都不能有公共区间, 否则有环.

考察一个节点 \([l,r]\), 他可以连出另一个节点 \([l_0,l]\) , 再向左延申, 右侧也同理, 这部分是一条链, 而另外的, 这个节点也可以连出其他节点 \([l+1,l+2],[l+3,l+4],\ldots [r-2,r-1]\). 因此, 这个树是一个链套菊花的结构.

设计一个类似于找最长链的 dp 就可以了, 答案统计和转移式都是类似的.

Adilbek and the Watering System

这个东西很像一个反悔贪心, 但是你会发现不好维护上界小于等于 \(c\) 的约束.

考虑脱离用堆维护反悔贪心框架的束缚, 考虑把运水的费用当用水时再计算.

考虑每次运水, 就尝试接受所有的水, 如果溢出了的话就尝试把当前最贵的水舍弃掉.

每次用水, 就把最便宜的水用掉并计入答案.

考虑需要维护最大值和最小值, map 是满足要求的, 模拟即可.

posted @ 2024-11-11 08:35  snowycat1234  阅读(120)  评论(0)    收藏  举报