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???

### Codeforces Div. 2 比赛介绍 Codeforces 是一个在线编程竞赛平台,其中Div. 2比赛面向的是那些评分低于2100分的参赛者[^1]。这类比赛旨在挑战并提升程序员解决问题的能力和技术水平。 ### 参与方式 为了参加Codeforces Div. 2的比赛,参与者首先需要注册账号,并确保个人评级满足参与条件。每次比赛前会有一个虚拟房间分配过程,在此期间选手可以选择加入特定的房间或接受随机安排。比赛通常持续两小时,其间可以尝试解决多个不同难度级别的算法问题。 ### 题目难度 Codeforces Div. 2 的题目按照难度分为几个等级,一般情况下: - **A类题**:相对容易入门级的问题,适合新手练习基础逻辑思维和编码技巧。 - **B类题**:稍微复杂一点的任务,可能涉及到更深入的数据结构应用或是简单的动态规划概念。 - **C/D类题**:这些属于中等到较难程度的问题,往往要求更高的抽象能力和创造性解法设计能力。 - **E/F及以上类别**:非常具有挑战性的高级别难题,不仅考验全面的知识体系掌握情况还涉及到了尖端的研究成果运用[^2]。 ```python # 示例代码用于展示如何连接到Codeforces API获取即将举行的赛事列表 import requests def get_upcoming_contests(): url = "https://codeforces.com/api/contest.list?gym=false" response = requests.get(url).json() upcoming_contests = [] for contest in response['result']: if 'DIV_2' in contest['name'].upper() and contest['phase'] == 'BEFORE': upcoming_contests.append(contest) return upcoming_contests ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值