Codeforces Round 965 (Div. 2) 题解
个人难度顺序:A < D < B < C < E。
A. Find K Distinct Points with Fixed Center
如果 是偶数,构造 ,其中 。
对于 是奇数,先加一个点 ,然后就变成偶数的情况了。
B. Minimize Equal Sum Subarrays
先猜只有 的和相等。
做前缀和,问题就变成了 。
移项可得 。
这就是在说,对于 , 互不相等。
然后枚举构造方式,发现可以构造 。
不难发现,如果 ,则 ;如果 ,则 。
观察到只有 ,所以这个构造是对的。
C. Perform Operations to Maximize Score
只会没有脑子的做法。
首先发现,让中位数增大的代价一定不比让 增大的代价小。
所以说对于 的 ,我们一定是让 变为 ,贡献为 ,删掉一个数时 median 的排名变化是 的,可以暴力。
对于 的 ,我们要让 尽可能大。
考虑如果只有一个 。
求中位数我们会二分一个 ,将 的位置标记为 0,其余位置标记为 1。
如果 0 的数量小于中位数的排名,就说明 ,所以我们的目标是让 0 的数量尽可能少。
这一步可以贪心去做,就是将每个位置按从 0 变 1 的代价从小到大排序,然后从前往后取,知道代价大于 。
这样就完成了 check,可以通过先从大到小排序将 check 优化到 。
现在我们有很多个 ,考虑整体二分。
发现 的位置并不能是 0 的个数改变,所以 check 和上面是一样的。
然后就做完了。
时间复杂度 。
D. Determine Winning Islands in Race
如果 Elsie 能一步跨过 Bessie 走过的路,那么他就赢了,也就是说只有额外边能决定胜负。
所以先求出从 1 到每个点 的距离 ,然后枚举每条额外边 。
发现 这条边只能让 Elsie 在 这几个点赢。
求答案的话就差分一下,时间复杂度 。
E1. Eliminating Balls With Merging (Easy Version)
只会笨蛋做法。
首先你会暴力,就是枚举每个位置 ,维护它能吸收的区间 ,然后 和 分别往两边扩。
但你仔细想想,如果你跨过了一个原本不能跨过的位置,那么 一定是翻倍的,所以只会扩展 次,每次扩展可以通过 ST 表+二分实现。
时间复杂度 。
E2. Eliminating Balls With Merging (Hard Version)
考虑在上一个题的基础上分别求出 扩展到 1 时 能扩展的最大位置和最小位置,这样做个前缀和就好了。
时间复杂度 。
是 P9530 [JOISC2022] 鱼 2 的超级弱化版。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步