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

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

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

Grid Sort

返回题目

题解

왼쪽 열부터 차례대로 완성한다. iii열을 완성할 때는 두 목표 수 iii와 N+iN+iN+i를 함께 살펴보고, 이미 완성한 열은 건드리지 않는다.

  • 두 목표 수가 같은 행에 있다면, 잘못된 행에 있는 수가 놓인 열에서 세로로 한 번 교환한다. 이제 두 수가 각각 올바른 행에 있으므로, 각 수를 가로 교환으로 iii열까지 옮긴다.
  • 두 목표 수가 서로 다른 행에 있다면, 각 수를 현재 행에서 iii열까지 옮긴다. 두 수의 행이 뒤바뀌어 있다면 마지막에 iii열에서 세로로 한 번 교환한다.

각 수의 현재 위치를 저장하고 교환할 때마다 갱신한다. 교환 목록을 저장한 뒤 그 길이와 목록을 출력하면 된다. 시간 복잡도와 교환 목록을 포함한 공간 복잡도는 모두 O(N2)O(N^2)O(N2)이다.

증명

iii열을 처리하기 전에 두 목표 수는 모두 iii열 이후에 있다. 알고리즘은 이 영역 안에서만 교환하며, 두 목표 수를 서로 다른 행에 둔 뒤 왼쪽으로 옮기므로 한 수를 옮기는 동안 다른 목표 수가 밀려나지 않는다. 따라서 이전 열들을 유지하면서 iii열을 올바르게 완성한다.

남은 열의 수를 m=N−i+1m=N-i+1m=N−i+이라 하자. 두 목표 수는 각각 가로로 최대 번 이동하고, 어느 경우든 세로 교환은 최대 한 번이다. 따라서 총 교환 횟수는

1
m−1m-1m−1
∑m=1N(2(m−1)+1)=N2\sum_{m=1}^{N}\bigl(2(m-1)+1\bigr)=N^2m=1∑N​(2(m−1)+1)=N2

이하이므로 만점 조건을 만족한다.