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

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

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

Traveling Salesperson Dadas

問題に戻る

解説

방문 순서의 iii번째 위치에 놓을 마을을 다음과 같이 선택한다.

  • iii가 홀수라면 아직 방문하지 않은 마을 중 YYY좌표가 가장 작은 마을을 선택한다.
  • iii가 짝수라면 아직 방문하지 않은 마을 중 XXX좌표가 가장 작은 마을을 선택한다.

이 방법으로 항상 올바른 순서를 얻는다. iii가 홀수라고 하자. PiP_iPi​를 선택할 때 Pi+1P_{i+1}Pi+1​은 아직 방문하지 않은 마을이므로, PiP_iPi​의 YYY좌표가 최소라는 사실과 모든 YYY좌표가 서로 다르다는 사실에서 YPi<YPi+1Y_{P_i}<Y_{P_{i+1}}YPi​​<YP가 성립한다. iii가 짝수인 경우에도 같은 논리로 XPi<XPi+1X_{P_i}<X_{P_{i+1}}XPi​​<XP가 성립한다. 따라서 모든 이동 조건이 만족되며, 답은 항상 존재한다.

각 좌표는 111부터 NNN까지의 정수를 정확히 한 번씩 사용한다. XXX좌표가 vvv인 마을과 YYY좌표가 vvv인 마을을 각각 배열에 저장한다. 아직 방문하지 않은 마을이 나올 때까지 최소 좌표 포인터를 증가시키면, 두 포인터는 각각 최대 번만 증가한다. 따라서 전체 시간 복잡도는 이고, 공간 복잡도는 이다.

Solution written by GPT5.6

i+1
​
​
i+1
​
​
NN
N
O(N)O(N)O(N)
O(N)O(N)O(N)