QOJ.ac

QOJ

Süre Sınırı: 1 s Bellek Sınırı: 64 MB Toplam puan: 100

#23809. 步行的圣诞老人

İstatistikler

题目描述

去年年底,圣诞老人忘记给 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.