CF Round 768 Div2 题解
A题 Min Max Swap
共 组数据。()
给定两个长度为 的数列 ,你现在可以进行不限量次操作,每次选择一个 ,并交换 ,问怎样可以使得两个数列的分别的最大值的乘积最大(不输出方案,只输出最大值)?
有一个显然的思路:找出最大值所在的数组,然后让另外一个数组里面的值尽可能小即可。
简化一下,就是:把每个位置上面小的数放在 a 里面,大的数放在 b 里面,遍历一次即可,复杂度 。
B题 Fun with Even Subarrays
共 组数据。()
给定一个长度为 的数组 ,我们可以进行如下操作:
选择一个长度为 的区间,然后将后 个数字平移到前 个位置上面(后 个位置上面值不改变),详情可以见原题。
问,至少需要多少次操作,可以使得整个数组的值变成一样?
显然,最后一个位置的值不可能被变成其他值,那么我们可以将数组转化一下,如果原位置的值等于 就记为 0,反之记为 1。那么问题就变成了:怎么在最快状态下使得整个数组变为 0?
我们直接贪心:记一个指针 ,从 开始,不断右移,当 内部不是全 0 时,给 p 加上 1,然后记 ,然后将区间 上面全部置为 0,同时 res 加上 1,再让 ,直到 为止,此时 res 的值就是最少操作次数。
关于怎么判断一个区间是不是全 0,以及怎么快速修改每个位置的值,我考场上套的树状数组,总复杂度 ,其实直接遍历一遍就行了,复杂度 。
C题 And Matching
有 组数据。()
给定 个数 ,保证 是 2 的幂,问能否给这 个数找到一种配对方式,使得 ,并输出该方案?
经过长时间观察,我发现了一种 时的构造方案: (这种方案是纯观察到的,但是存在性不容置疑:对每个数,直接寻找按位反差的那个值来配对即可)
如果 ,我们发现找出下面两组: ,然后交换一下,变为 即可,别的值不变,这两组的值之和增加了 ,刚好满足要求。
的时候,我一开始以为无解,然后 WA 了几发之后老老实实去找方案:我们选择 两组变换为 ,这样可以增加 ;随后,我们选择 两组,变化为 。从二进制上面不难发现,仅有最后一位出现了变化,其他位置保持不变,所以答案增加 1,刚好凑成 ,成功。( 的时候无解,因为此时仅有两组,不够分)
D题 Range and Partition
有 组数据。()
给定一个长度为 的数列 和正整数 ,问能否找到一个区间 ,使得我们能将数列分成恰好 段,每段里面,在该区间内部的数要比不在该区间的数要多?若存在,请输出 最小值。
存在性毋庸置疑:让这个区间为 即可,然后想怎么分。
我们先来看看,在确定了区间之后,如何判断该区间是否合法:我们构建一个新数组 ,原数组中在该区间内部的数标记为 1,反之标记为 0,那么问题就变成了:给定一个 01 数组,问能否恰好分成 组,每组内部 1 的数量都大于 0?
今年牛客冬令营的第一场 F 题有一个类似的题目,问能否分成若干段,使得每段中位数都大于某个值。那场的题解和标准证明都在这:题解,我们直接搬运一下结论:当区间内 1 的个数减去 0 的个数大于等于 时存在分组方案,直接扫一遍,复杂度 。(本题还需要输出方案,道理也差不多
如果我们暴力枚举 ,那么总复杂度就是 ,如果枚举 并二分 ,那么复杂度就是 。
上面因为搬运结论,刚给忘了一个东西:我们并不需要扫一遍整个数组,只需要先给排个序,然后每次统计数量的时候直接两次二分即可,这样复杂度就降到了 ,应该可以通过了。
不过我们还发现: 均符合单调性质,所以我们还可以双指针,将枚举 的复杂度降到 ,这样就可以在 的复杂度内解决该问题了。
其实我们甚至不用直接枚举 ,而是直接枚举对应的下标:在排序好的数组上枚举 ,保证 之间的数要多于不在该范围的数,然后不断更新 即可。这个 甚至不需要双指针,直接预先算好那个合适的距离 即可。
__EOF__

本文链接:https://www.cnblogs.com/cyhforlight/p/15867491.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2021-02-07 2021牛客寒假算法基础集训营3 解题补题报告