CF 1238 题解

CF 1238 题解

A Prime Subtraction

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

因此原题不合法当且仅当 ba=1.

B Kill 'Em All

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

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

C Standard Free2play

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

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

D AB-string

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

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

扫一遍就可以统计了.

E Keyboard Purchase

首先, 字符集大小 n20, 考虑状压.

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

特别的, 对任意 i, 令 cnti,i=0.

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

i=1nj=in|posiposj|cnti,j

我们想要答案最小.

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

ans=i=1nj=in(posiposj)cnti,j=i=1nposi(j>icnti,jj<icnti,j)

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

fS 表示只考虑 xSposx 的贡献, 并且已经决定好它们的 pos, 并且按照 pos 的顺序加入集合, 则有转移式:

fS|xfS+|S|(yScnty,xyScnty,x)

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

F The Maximum Subtree

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

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

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

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

Adilbek and the Watering System

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

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

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

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

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

posted @   snowycat1234  阅读(114)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示