QOJ.ac

QOJ

Time Limit: 3 s Memory Limit: 2048 MB Total points: 25

#12415. 巡逻机器人

Statistics

坐标控制组织开发了一种自动机器人,用于在二维平面上巡逻 $N$ 个不同的重要地点。第 $i$ 个地点的坐标为 $(x_i, y_i)$,保证任意三个地点不在同一条直线上。

为了引导机器人,你可以在地面上绘制一些线段。每条线段必须直接连接两个重要地点,且除端点外,任意两条线段不得相交。

机器人将从任意一条线段的中点开始巡逻,面向该线段的其中一个端点。它将按照以下步骤无限期地移动:

  • 只要机器人处于某条线段的内部,它就会向前移动,朝向该线段的一个端点。
  • 当机器人到达一个重要地点时,它最初会面向直接背离刚刚经过的线段的方向。机器人会向右(顺时针)转动,直到其视线与一条从当前地点出发的线段对齐。然后,机器人将开始沿着这条新线段移动。

你的任务是绘制线段,使得无论机器人从哪里开始,都能保证无限次访问每一个重要地点。可以证明这总是可能的。

输入格式

第一行包含一个整数 $N$ ($2 \le N \le 2000$),表示重要地点的数量。

接下来的 $N$ 行,每行包含两个空格分隔的整数 $x_i$ 和 $y_i$ ($-10^9 \le x_i, y_i \le 10^9$),表示第 $i$ 个重要地点的坐标。

保证所有 $N$ 个重要地点各不相同,且任意三个地点不在同一条直线上。

子任务

下表显示了 25 分的分布情况:

获得分数 附加约束
2 分 $2 \le N \le 4$
4 分 $2 \le N \le 8$
3 分 $3 \le N$ 且这 $N$ 个点按某种顺序构成凸多边形的顶点
7 分 这 $N$ 个点构成一个凸多边形,且多边形内部有一个额外点
9 分

输出格式

第一行输出一个正整数 $M$,表示你在地面上绘制的线段数量。

接下来的 $M$ 行,每行应包含两个空格分隔的整数 $u_i$ 和 $v_i$ ($1 \le u_i, v_i \le N, u_i \neq v_i$),表示你在第 $u_i$ 个和第 $v_i$ 个重要地点之间绘制了一条线段。

如果有多种可行的答案,输出其中任意一种即可。

样例

输入格式 1

4
0 0
1 1
1 2
2 1

输出格式 1

3
1 2
2 3
2 4

说明

重要地点和绘制的线段如下图所示:

无论机器人从哪里开始,它都会无限次访问每一个重要地点。例如,如果机器人从地点 1 和 2 之间的线段中点开始,面向地点 2,机器人访问地点的顺序为:

$2, 4, 2, 3, 2, 1, 2, 4, \dots$

其中下划线部分会无限重复。

输入格式 2

8
0 0
0 3
1 1
1 2
4 1
4 2
5 0
5 3

输出格式 2

9
1 2
2 4
4 8
8 7
7 5
5 1
3 4
4 5
5 6

说明

重要地点和绘制的线段如下图所示:

无论机器人从哪里开始,它都会无限次访问每一个重要地点。例如,如果机器人从地点 4 和 5 之间的线段中点开始,面向地点 5,机器人访问地点的顺序为:

$5, 7, 5, 6, 5, 1, 2, 4, 3, 4, 8, 7, 5, \dots$

其中下划线部分会无限重复。注意,并不要求每一条线段都被无限次遍历;只要每一个地点都被无限次访问,该方案就是有效的。

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.