Codeforces Round 889 (Div. 1)
1|0Preface
由于一轮集训最后一周题目难度变大加上要写专题补专题导致欠了很多的博客没写,接下来慢慢把它们补上吧
才不是因为天天溜会寝室看LPL呢,我发誓
顺序的话就倒着来好了,先从最后的这场收尾的CF补起好了
这场其实刚开始就被A1,A2卡的很难受,大概1h左右过了之后一直在刚B,其实核心的思路全部都想到了但就是没想到用bitset
去优化那个东西(看到区间平移下意识地以为是平衡树)
不过惊喜的是这样都不掉分真是绷不住了,感觉靠刮痧真有机会刮上2100的说
2|0A1. Dual (Easy Version)&&A2. Dual (Hard Version)
这题其实说穿了很简单,但就是需要一点灵光想到刚开始的那步
首先考虑如果所有数都,那么有一个显而易见的步的做法,就是从左往右每次把前一个数加到后一个数上
同样的如果所有数都,就可以从右往左把后一个数加到前一个数上去
但现在有一个问题就是序列中的数有正有负该怎么处理,以把所有数变成的情况为例
我们肯定是找到最大的那个正数,然后通过将其翻倍来让它比绝对值最大的那个负数的绝对值大,然后我们在把所哟的负数加上它即可
但只是这样的话不足以通过A2,其实仔细想一下这个东西就是个trade-off,我们每次判断下是把所有数改成还是更优即可
比赛的时候想到这个就感觉绝对是对的了,就没细算操作次数,最后样例一过直接一交就过了
3|0B. Earn or Unlock
首先有一个很trivial的DP做法,设表示处理了前张牌,解锁了前张牌时能获得的最大收益
则转移很显然,不过要注意合法的状态必须满足:
- 用第张牌去解锁,
- 获得第张牌的价值,
然后观察DP的式子我们会发现其实已知的情况下贡献是确定的,因为只要能确定能到达这个状态了那么操作的顺序啥的就无关紧要了
换句话说,假如最后解锁前张牌的状态是合法的,那么它对应的贡献一定是
那么我们的DP其实只要考虑第一种情况即可,这种状态的平移直接用bitset
就很好解决了(因为我们只要知道每个位置的可达性即可)
实现的时候可以设第的牌都是,总复杂度
4|0C. Expected Destruction
比赛的时候看到期望就不敢做了,其实赛后一看感觉海星,就当学个思路吧
首先把问题转化为,在长为的数轴上有若干个棋子,每次可以选一个棋子向后走一步,同一个位置最多存在一个棋子,当所有棋子到达时结束
那么如果没有任何两个棋子在同个地方相遇的话答案就是,现在我们考虑减去由于位置重合带来的影响
如果在位置有两个棋子相遇,那么它们带来的贡献减少是显然的,就是,问题就是怎么求出概率
如果直接用后面的棋子追上前面的棋子后两个合并成一个的这种观点的话就很难想清楚,其实我们仔细想一下可以发现不妨假设后面的棋子在追上前面的棋子后就直接消失了
这样有一个好处就是所有的棋子间的相遇都只可能在相邻的棋子间进行,而根据期望的线性性,这样处理是没问题的
那么我们不妨单独考虑两个相邻的棋子,只考虑它们的移动时就是个经典套路,就是各自的概率向前走
设表示两个棋子分别处于位置时减去的期望贡献,转移非常trivial,只是要注意当时要直接中止返回
5|0Postscript
补天咯
__EOF__

本文链接:https://www.cnblogs.com/cjjsb/p/17594626.html
关于博主:复活的ACM新生,目前爱好仅剩Gal/HBR/雀魂/单机/OSU
版权声明:转载请注明出处
声援博主:欢迎加QQ:2649020702来DD我
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· Apache Tomcat RCE漏洞复现(CVE-2025-24813)
2020-07-31 AtCoder Grand Contest 033