CF Round 771 Div2 题解
A题 Reverse
给定一个长度为 的排列,我们可以选择将其中一个区间反转,问怎样反转可以使得这个新排列的字典序最小,并输出这个最小的字典序。
如果字典序已经最小,那么就不管他。
假设区间 上面的数都在合适的位置上,而 ,那么我们直接找到后面等于 l 的位置,下标记为 r,然后反转区间 即可。
B题 Odd Swap Sort (构造)
给定一个长度为 的数列 。如果两个相邻元素之和为奇数,那么我们就可以将其进行交换。问我们能否通过若干次操作将这个数列变为单调不降?
一个不是很直观的冷知识:如果两个数都是奇数(偶数),那么他们的相对位置不会产生变化(他俩不可能交换顺序)。
所以我们直接按照奇偶,按顺序将原数组分成两个,如果两个数组均单调不降,那么最后这个数组也是可以通过交换而变为单调不降的。
C题 Inversion Graph(图,数学,数据结构)
给定一个长度为 的排列 ,我们将依照此排列来建立一个图:
图起初有 个孤立点,倘若存在逆序对 ,则在这两个点之间连一条边。
图建立完毕后,问这个图的连通块的数量是多少。
有一个并不显然的性质:倘若存在逆序对 ,那么整个区间内的点都在一个连通块内。
证明:我们记 ,那么:
- 时,有 ,i 和 l 之间连边
- 时,有 ,i 和 r 之间连边
又因为 l 和 r 之间存在边,所以整个区间 都在一个连通块内。
那么,我们将最后的连通块按照形成顺序排序,那么他们显然是一个升序,这一流程类似单调栈,所以我们用栈来维护。
我们记栈顶为 (空则为 0),新点的值为 ,如果 则直接推进去,反之则一直从栈顶 pop,直到栈顶元素小于 ,然后将 推进去。
D题 Big Brush(BFS,构造)
给定一张 的格子图,现在我们可以进行若干次操作,每次操作选定一个坐标 和一个颜色 ,然后将 全部涂上 。
现在给定一张已经涂好色的地图,问我们能否构造出我们的操作顺序(至多进行 次操作)?不能则输出 -1。
我们首先将地图上可以直接进行操作的那几块进行操作,然后将他们标记上 0。
随后,我们地图上不停找点,如果这个点可进行操作(且有必要进行操作),那么下一次就对他进行操作。
暴力寻找是不可取的(电脑不像人眼一样能一眼看出来),但是每次将一个块操作完之后,我们只考虑其周围的八个点,并考虑下一步对他们进行操作。这个 FIFO 的模式,我们肯定写一个队列来处理。
考虑到操作的次数限制,加上避免死循环,所以额外开一个 vis 数组来标记,避免某个点重复进入队列。
总复杂度 ,不过自带大常数,需要花心思优化。
__EOF__

本文链接:https://www.cnblogs.com/cyhforlight/p/15963366.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!