noip 以后 CF 题选录

contests

Educational Codeforces Round 117

D. X-Magic Pair

发现能够凑出的数都是这样形成的:
比如 a>b,那么一直让 ab,如果 a<b 那么交换
然后模拟 gcd 的过程即可,即求 gcd 的过程 x%b==a%b 则满足条件


E. Messages

利用期望的线性性,那么总期望等于各信的期望之和
假如目前选择 t 封信,那么对于一个信的主人 i,如果 kit,那么获得 1 的期望,否则获得 ki/t 的期望
考虑 t 的范围,结论是 tmax{ki}

证明:假设 t21 的最有情况,即前 21 大的信都有 x 个人,每个人的 k 都是 20,那么减少的为 121F20x,增加的是 2021Fx,发现最有情况正好相等,那么意味着 t 变成更大一定不优


F. Armor and Weapons

首先暴力的想法是直接 bfs 二元组 (a,b)
然而一个很好的条件是特殊点对的加成为 1,那么发现 xy 越大一定越优
可以按照层数来 dfs,那么对于每层来说如果存在点对 (x,y)(x,y),满足 xx,yy,那么 (x,y) 可以说是没有用的了
那么这样每层的状态实际上非常少,最多 m 个,而 bfs 到答案最多大约 log 层,那么复杂度 mlogn

这道题启示我们进行类最短路 bfs 时要尽量地对状态进行优化与剪枝


G. Max Sum Array

首先是这样一个结论:一开始两端点一个定放个数最多的那种数,证明省略
那么就出现了可以递归的子问题,然后递归处理即可
发现出现不同方案数可能由于每一层同时有多个个数最多的数,假设有 k
通过同样的方式可以证明摆放顺序没有关系,那么有 (k!)2 种方案
利用桶排 O(m) 处理即可


Codeforces Round 709

C. Skyline Photo

写出来 dp 方程:f[i]=max{f[j]+bmin{ai}}
发现转移是成段的,即每个 i 管理一段
那么可以直接用单调栈来解决这个问题,每个单调栈里记录栈中这个元素到上一个元素之间的最优转移即可


D. Useful Edges

首先是暴力的想法,枚举每一条边,枚举每一个三元组,如果满足 dis[u][x]+w(x,y)+dis[y][v]l 则满足条件
移项得 dis[u][x]+w(x,y)ldis[y][v]
两边都有的是 u,y,那么对于固定的 u,y,枚举一边更新另一边即可


杂题

数据结构

CF1136E Nastya Hasn't Written a Legend

我也不知道正解是怎么想到这道题中的不变量的……
发现 aiai1+ki1a1+sumi1
那么设 ui=aisumi1
那么带入得到 uiui1,即是单调的
操作一相当于单点加,配合线段树上二分与区间覆盖来维护单调新
操作二相当于区间和,减去前缀和的前缀和

注意可能区间赋值为零,lazy 标记要初始化为 inf

posted @   y_cx  阅读(49)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示