QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 64 MB Total points: 100

#23809. 步行的聖誕老人

Statistics

題目描述

去年年底,聖誕老人忘記給 JOI 村的孩子們送聖誕禮物了。因此,為了表達歉意,他決定給孩子們送巧克力蛋糕。由於送達的日子就在明天,差不多必須開始考慮移動計畫了。

JOI 村被南北方向筆直延伸的 $W$ 條道路與東西方向筆直延伸的 $H$ 條道路劃分為棋盤格狀。南北方向的 $W$ 條道路從西往東依次編號為 $1, 2, \dots, W$,東西方向的 $H$ 條道路從南往北依次編號為 $1, 2, \dots, H$。從西數第 $x$ 條南北方向的道路與從南數第 $y$ 條東西方向的道路相交的交叉點記作 $(x, y)$。JOI 村裡有 $N$ 戶人家,它們各自位於某個交叉點上。聖誕老人只能沿著道路移動。在相鄰交叉點之間移動所需的時間為 $1$。

由於 JOI 村的所有人家裡都有孩子,聖誕老人必須走訪 JOI 村的所有人家,每家各送 $1$ 個巧克力蛋糕。帶著珍貴的巧克力蛋糕與馴鹿一起在空中飛來飛去有些危險,因此聖誕老人與馴鹿決定降落在 JOI 村的某個交叉點上,再由聖誕老人從那裡步行去派送巧克力蛋糕。聖誕老人不會同時拿著 $2$ 個或以上的巧克力蛋糕步行。也就是說,聖誕老人每次將巧克力蛋糕送到 $1$ 戶人家後,都會返回降落的那個交叉點。

聖誕老人決定選擇一種移動計畫,使得從降落在 JOI 村開始到給所有人家送完巧克力蛋糕為止的所需時間最小。注意,給最後一家送完巧克力蛋糕後返回降落交叉點的時間不計入所需時間內。此外,不考慮除移動所需時間以外的任何因素。

給定各戶人家位置的資訊,請撰寫一個程式,求出當聖誕老人妥善選擇降落的交叉點時,從降落在 JOI 村開始到給所有人家送完巧克力蛋糕為止所需時間的最小值,以及為了使所需時間最小應當降落的交叉點位置。

輸入格式

從標準輸入讀入以下輸入:

  • 第 $1$ 行包含以空格分隔的整數 $W, H$,表示各個方向的道路條數。
  • 第 $2$ 行包含整數 $N$,表示人家的數量。
  • 接下來的 $N$ 行包含各戶人家位置的資訊。第 $(i + 2)$ 行($1 \le i \le N$)包含以空格分隔的整數 $X_i, Y_i$,表示第 $i$ 戶人家位於交叉點 $(X_i, Y_i)$。這 $N$ 個交叉點互不相同。

輸出格式

向標準輸出輸出以下資料:

  • 第 $1$ 行必須輸出 $1$ 個整數,表示所需時間的最小值。
  • 第 $2$ 行:設為了使所需時間最小應當降落的交叉點為 $(x, y)$,則必須按此順序輸出以空格分隔的 $2$ 個整數 $x, y$。如果合適的交叉點有多個,則選擇其中最靠西(即 $x$ 的值最小)的交叉點;如果仍不能唯一確定為 $1$ 個,則進一步在其中選擇最靠南(即 $y$ 的值最小)的交叉點。

範例

範例 1

輸入
5 4
3
1 1
3 4
5 3
輸出
10
3 3
解釋

例如,可以透過如下移動計畫使所需時間最小:

  • 降落在交叉點 $(3, 3)$。
  • 給位於交叉點 $(3, 4)$ 的人家送巧克力蛋糕。到目前為止經過的時間為 $1$。
  • 返回交叉點 $(3, 3)$。到目前為止經過的時間為 $2$。
  • 給位於交叉點 $(5, 3)$ 的人家送巧克力蛋糕。到目前為止經過的時間為 $4$。
  • 返回交叉點 $(3, 3)$。到目前為止經過的時間為 $6$。
  • 給位於交叉點 $(1, 1)$ 的人家送巧克力蛋糕。到目前為止經過的時間為 $10$。

範例 2

輸入
4 6
8
1 3
3 2
4 4
2 5
2 3
3 3
3 4
2 4
輸出
21
2 3
解釋

注意,聖誕老人也可以降落在有人家的交叉點上。

數據範圍與提示

  • $1 \le W \le 1000000000 = 10^9$:南北方向延伸的道路條數。
  • $1 \le H \le 1000000000 = 10^9$:東西方向延伸的道路條數。
  • $1 \le N \le 100000 = 10^5$:人家的數量。
  • $1 \le X_i \le W$:第 $i$ 戶人家所在位置的南北方向延伸的道路編號。
  • $1 \le Y_i \le H$:第 $i$ 戶人家所在位置的東西方向延伸的道路編號。

注意,在本題中,所處理的整數範圍可能無法容納於 $32$ 位元整數中。

計分基準

  • 在佔總分 $40\%$ 的測試資料中,滿足 $N \le 1000$。
  • 在佔總分 $10\%$ 的測試資料中,滿足 $W \le 50, H \le 50, N \le 1000$。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.