DOJ logoDOJ
問題
最近追加された問題保存した問題
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

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

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