阿克近在眼前。|

definieren

园龄:3年粉丝:7关注:4

Codeforces Round 965 (Div. 2) 题解

个人难度顺序:A < D < B < C < E。

A. Find K Distinct Points with Fixed Center

如果 k 是偶数,构造 (xc+i,yc+i),其中 k2ik2
对于 k 是奇数,先加一个点 (xc,yc),然后就变成偶数的情况了。

B. Minimize Equal Sum Subarrays

先猜只有 [1,n] 的和相等。
做前缀和,问题就变成了 sumprsumplsumqrsumql
移项可得 sumprsumqrsumplsumpl
这就是在说,对于 inΔi=sumqisumpi 互不相等。

然后枚举构造方式,发现可以构造 qi=pimodn+1
不难发现,如果 pi<n,则 Δi=Δi1+1;如果 pi=n,则 Δi=Δi1(n1)
观察到只有 Δ0=Δn=0,所以这个构造是对的。

C. Perform Operations to Maximize Score

只会没有脑子的做法。
首先发现,让中位数增大的代价一定不比让 ai 增大的代价小。
所以说对于 bi=1i,我们一定是让 ai 变为 ai+k,贡献为 ai+k+median(ci),删掉一个数时 median 的排名变化是 O(1) 的,可以暴力。
对于 bi=0i,我们要让 median(ci) 尽可能大。

考虑如果只有一个 bi=0
求中位数我们会二分一个 mid,将 aimid 的位置标记为 0,其余位置标记为 1。
如果 0 的数量小于中位数的排名,就说明 median(ci)>mid,所以我们的目标是让 0 的数量尽可能少。
这一步可以贪心去做,就是将每个位置按从 0 变 1 的代价从小到大排序,然后从前往后取,知道代价大于 k
这样就完成了 check,可以通过先从大到小排序将 check 优化到 O(n)

现在我们有很多个 bi=0,考虑整体二分。
发现 bi=0 的位置并不能是 0 的个数改变,所以 check 和上面是一样的。
然后就做完了。

时间复杂度 O(nlogV)

D. Determine Winning Islands in Race

如果 Elsie 能一步跨过 Bessie 走过的路,那么他就赢了,也就是说只有额外边能决定胜负。
所以先求出从 1 到每个点 u 的距离 disu,然后枚举每条额外边 (u,v)
发现 (u,v) 这条边只能让 Elsie 在 (u,vdisu1) 这几个点赢。
求答案的话就差分一下,时间复杂度 O(n)

E1. Eliminating Balls With Merging (Easy Version)

只会笨蛋做法。
首先你会暴力,就是枚举每个位置 i,维护它能吸收的区间 [l,r],然后 lr 分别往两边扩。
但你仔细想想,如果你跨过了一个原本不能跨过的位置,那么 ai 一定是翻倍的,所以只会扩展 O(logV) 次,每次扩展可以通过 ST 表+二分实现。
时间复杂度 O(nlognlogV)

E2. Eliminating Balls With Merging (Hard Version)

考虑在上一个题的基础上分别求出 l 扩展到 1 时 r 能扩展的最大位置和最小位置,这样做个前缀和就好了。
时间复杂度 O(nlognlogV)
P9530 [JOISC2022] 鱼 2 的超级弱化版。

posted @   definieren  阅读(768)  评论(1编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起