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

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

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

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)