DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

一半重排

返回题目

题解

记错位位置的集合为 M={i∣Pi≠i}M=\{i\mid P_i\ne i\}M={i∣Pi​=i},并令 m=∣M∣m=|M|m=∣M∣。

若 m=0m=0m=0,答案为 000。

若 1≤m≤N1\le m\le N1≤m≤N,答案为 111。选择所有错位位置,再任意补充固定点直到恰好选择 NNN 个位置,一次重排即可全部排好。

下面设 m>Nm>Nm>N。设两次重排选择的位置集合分别为 A,BA,BA,B。由于 ∣A∣=∣B∣=N|A|=|B|=N∣A∣=∣B∣=N,有

∣A∩B∣=∣{1,⋯ ,2N}∖(A∪B)∣.|A\cap B|=|\{1,\cdots,2N\}\setminus(A\cup B)|.∣A∩B∣=∣{1,⋯,2N}∖(A∪B)∣.

位于 A∪BA\cup BA∪B 之外的位置从未被操作,因此它们一开始就必须是固定点。

若至少存在一个固定点,则答案为 222。因为 m>Nm>Nm>N,一次重排不可能完成;另一方面,可以让一个固定点同时位于两次选择集合之外,从而总能在两次重排内完成排序。

接下来考虑不存在固定点的情况。此时 A∪BA\cup BA∪B 外不能有任何位置,因此上式迫使 A∩B=∅A\cap B=\varnothingA∩B=∅,即 A,BA,BA,B 恰好把全部位置分成两部分。AAA 中的位置只会在第一次重排中被操作,所以第一次重排结束后它们必须已经全部正确。

将排列分解成若干个环。如果 AAA 只包含某个环的一部分,那么其中至少有一个位置所需要的值仍位于 BBB 中。因此 AAA 必须是若干完整环的并。反过来,如果存在若干环的长度之和恰好为 NNN,第一次重排排好这些环,第二次重排排好其余环即可。

所以在不存在固定点时,两次重排可行当且仅当某些环长之和恰好为 NNN。这可以用子集和 DP 在 O(N2)O(N^2)O(N2) 时间内判断。

若存在这样的子集,答案为 222;否则答案为 333。后一种情况下,两次重排由上述必要条件可知不可能;另一方面,可以先用一次重排制造一个固定点,再利用存在固定点的情况,最多再用两次即可完成。

因此答案始终属于 0,1,2,30,1,2,30,1,2,3。每个测试用例的时间复杂度为 O(N2)O(N^2)O(N2),空间复杂度为 O(N)O(N)O(N)。

Solution written by GPT5.6