CF 1365 题解
A Prime Subtraction
任何数的因数中都会有质数, 除非他是 \(1\).
因此原题不合法当且仅当 \(b-a=1\).
B Kill 'Em All
首先, 答案有明确的下界: 最右面的怪兽一定要处理. 不断模拟去杀掉当前最靠右的怪兽, 得到的答案就是答案的下界.
是否能取到下界呢? 答案是肯定的. 注意到刚刚的过程可以顺带把所有怪兽都杀掉, 是一种合法的方案.
C Standard Free2play
考虑每到达一个台阶, 首先它可以没有代价的到达下面一个台阶的上方 \(1\) 格, 然后, 考察下面一个台阶的下方 \(1\) 格是否打开, 没有打开就要花费 \(1\) 的代价到达下方.
这个贪心的正确性在于一定想要用较少的钱到达较低处的位置, 在更高的位置显然不优.
D AB-string
一个很好的性质是字符集只包括两种字符.
这样, 不符合要求的串只有 AAAA...AAB
和 ABB...BBB
以及类似形式.
扫一遍就可以统计了.
E Keyboard Purchase
首先, 字符集大小 \(n\leq20\), 考虑状压.
答案只与相邻两个字符是什么有关, 与原串无关, 考虑转化: 记 \(cnt_{i,j}\) 表示 字符 \(i,j\) 相邻了多少次, 这是好统计的.
特别的, 对任意 \(i\), 令 \(cnt_{i,i}=0\).
现在要给每个字符分配一个位置排列 \(pos_i\), 则答案是
我们想要答案最小.
我们设计一个 dp, 首先, 每次转移按照 \(pos\) 顺序加入一个元素, 加入的这一刻我们能够知道 \(i\) 的 \(pos_i\) 是什么 (就等于目前集合大小), 但是其他的都不知道, 这意味着原来的式子不能直接维护, 需要拆掉, 你把元素都按照 \(pos\) 排序后 (也就是转移顺序) 可以得到:
这个式子就比较清晰了, 用 dp 去求解这个式子的最小值就好.
设 \(f_S\) 表示只考虑 \(x\in S\) 的 \(pos_x\) 的贡献, 并且已经决定好它们的 \(pos\), 并且按照 \(pos\) 的顺序加入集合, 则有转移式:
由于按照 \(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
是满足要求的, 模拟即可.