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

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

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

V-Sort

返回题目

题解

将每个位置视为顶点,每种允许的交换对应一条无向边。通过边上的交换,可以在同一连通分量内实现任意排列。因此,可行的充要条件是每个分量中当前值的多重集合与目标值的多重集合相同。位置 Ai,BiA_i,B_iAi​,Bi​ 的目标值均为 iii。

  • 子任务 1(X=Y=0X=Y=0X=Y=0):只能交换 Ai,BiA_i,B_iAi​,Bi​。两者的目标值都是 iii,所以所有位置必须原本就正确。时间复杂度为 O(N)O(N)O(N)。
  • 子任务 2(X=Y=1X=Y=1X=Y=1):两个分量分别为 A1,B2,A3,B4,…A_1,B_2,A_3,B_4,\ldotsA1​,B 与 。每个分量中 到 必须各出现一次。统计频次,时间和空间复杂度均为 。 时,它们是两个孤立顶点。
  • 子任务 3(X=0X=0X=0):Y=0Y=0Y=0 时同子任务 1。Y>0Y>0Y>0 时,Ai,BiA_i,B_iA 相连,且下标可相差 的倍数,所以各分量对应下标模 的余数类。检查位置 上的值 是否满足 ,并检查每个值在两个序列中总共出现两次。时间和空间复杂度均为 。
  • 子任务 4(N≤5N\leq5N≤5):朴素解法在 2N2N2N 个位置上用 Floyd–Warshall 算法计算连通性,再将每个分量的当前值和目标值分别排序比较。时间复杂度为 O(N3)O(N^3)O(N3),空间复杂度为 O(N2)O(N^2)。
  • 子任务 5(N≤3 000N\leq3\,000N≤3000):建立邻接矩阵,用 DFS 求连通分量,每个顶点扫描所有可能的邻点,再比较分量中的频次。时间和空间复杂度均为 O(N2)O(N^2)O(N2)。文件内 ∑N≤3 000\sum N\leq3\,000∑N≤,所以 。
  • 子任务 6:每个顶点至多有两个邻点,可以由下标直接计算,无需邻接矩阵。用非递归 DFS 求分量,对当前值的频次加一,对目标值的频次减一。检查并重置本分量访问过的条目,不能每次清空整个数组。时间和空间复杂度均为 O(N)O(N)O(N)。

X=NX=NX=N 或 Y=NY=NY=N 时,相应类型的边不存在。孤立顶点也必须检查。允许重复值,因此仅比较元素和是不够的。完整解法总时间复杂度为 O(∑N)O(\sum N)O(∑N)。所有下标和频次的绝对值不超过 1 000 0001\,000\,0001,无需超出 64 位有符号整数范围的运算。

Solution written by GPT

2
​
,
A3​
,
B4​
,
…
B1,A2,B3,A4,…B_1,A_2,B_3,A_4,\ldotsB1​,A2​,B3​,A4​,…
111
NNN
O(N)O(N)O(N)
N=1N=1N=1
i​
,
Bi​
YYY
YYY
iii
vvv
(v−1) mod Y=(i−1) mod Y(v-1)\bmod Y=(i-1)\bmod Y(v−1)modY=(i−1)modY
O(N)O(N)O(N)
O
(
N2
)
3
000
∑N2≤9 000 000\sum N^2\leq9\,000\,000∑N2≤9000000
000
000