Codeforces 922 div2 d、e、f

简单,但很有意思

D. Robot Vacuum Cleaner

题目:给一些由“s”和“h”组成的字符串,把这些字符串拼接起来,贡献是所有“h”前面“s”的个数的和。
思考过程:一开始不知道怎么下手,但是可以分析出来一些性质

  • 每个串内部的贡献是可以单独计算的(虽然没什么意义)
  • 前后两个串是第一个的“s”与第二个的“h”相关(好像也没什么用
  • “s”和“h”的数量是固定的(看起来好像没用,证明却少不了)
  • 这个字符串好像具有传递性?

咳咳,根据qbxt长者的至理名言——“大胆猜测,从不验证,轻松爆零”来看,似乎是有点道理的。于是我就试了试,就A了。

事后来证明一下,似乎是很有道理的。
感性证明:
首先,两个字符串之间先后顺序很好决定,直接判断就ok
其次,我们如何证明传递性?
a a 优于b b b 优于c
可得 sahb>sbha s a ∗ h b > s b ∗ h a sbhc>schb s b ∗ h c > s c ∗ h b
移项得 sa/ha>sb/hb s a / h a > s b / h b sb/hb>sc/hc s b / h b > s c / h c
所以 sa/ha>sc/hc s a / h a > s c / h c
再移项得 sahc>scha s a ∗ h c > s c ∗ h a

传递性得证。

E. Birds

题目:给几颗树(有顺序),树上有 ci c i 只鸟,把第 i i 颗树的鸟打下来要花费体力costi。人从第一颗树往后走,每走过一棵树体力上限增加 B B ,同时体力也会回复X。问最多能打多少只鸟。
思考过程:没什么过程,一看就是多重背包dp,非常无趣,数据范围还很小。

F. Divisibility

题目:给 n n k两个整数,求一个集合 I I 满足f(I)=k,其中函数 f(I) f ( I ) 定义为集合 I I 内满足以下条件的数对(a,b)的个数:
- ab
- a|b a | b
思考过程:首先,这肯定是个数论。然后看到复杂度,是30W级别的,猜测算法的复杂度。然后,这个东西是跟整除有关系,也就是约数之类的,有可能是反演。但是要求是整除,限制大了很多,因此可能性不大。所以还是考虑dp之类的,甚至是结论题。经历一番思考发现,好像都不太对,似乎没有这么()简单。因此从性质入手考虑。
性质:
- 集合之间,包含关系即单调关系(个数越多数对越多)
- 不会有某一个元素能贡献的价值超过总价值的一半(除了2)
- 由上一个性质可以推出如果存在 f(I)k f ( I ) ≥ k 那么存在 f(I)=k f ( I ) = k
- 由上一个性质可以推出, n n <script type="math/tex" id="MathJax-Element-4178">n</script>是单调的
然后利用这些性质能够直接递归子问题求解。

最后

至于为什么没有a、b、c?

  1. 简单

cf什么时候能让我做div1???

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值