QOJ.ac

QOJ

Límite de tiempo: 2.0 s Límite de memoria: 512 MB Puntuación total: 100

#13092. 简单多边形

Estadísticas

设 $S$ 为 $n$ 条线段的集合。每条线段的一个端点位于平面上的 $x$ 轴上,另一个端点位于 $x$ 轴上方。所有端点各不相同,但线段在内部可能会相交。我们希望绘制一个简单多边形 $P$,使得 $S$ 中的每一条线段都是 $P$ 边界的一部分,即 $P$ 的一条边或边的一部分。如果多边形 $P$ 的每个顶点的内角都不为 $180^\circ$,且除了相邻边在顶点处相交外,没有两条边相交,则称该多边形为简单多边形。

例如,图 H.1 展示了可以绘制简单多边形的线段示例。图中,黑色实线段代表给定集合 $S$ 中的线段。结合红色虚线段,构成了一个简单多边形。该图左侧是一个简单多边形,使得 $S$ 的所有端点都成为 $P$ 的顶点。右侧展示了一个仅有 6 个顶点的简单多边形;其中两个端点分别位于两条边的内部。请注意,集合 $S$ 中线段的端点不一定必须是为 $S$ 绘制的简单多边形的顶点。

图 H.1:可以绘制简单多边形的线段示例。

另一方面,图 X.2 展示了无法绘制任何简单多边形的线段示例。

图 X.2:无法绘制任何简单多边形的线段示例。

对于一组线段,可能存在多个简单多边形。在这种情况下,我们希望找到一个边界长度最小的简单多边形。例如,图 H.3 中所示简单多边形的边界长度小于该集合的其他任何简单多边形。

图 H.3:边界长度最小的简单多边形。

给定一组线段,编写一个程序来确定是否存在该集合的简单多边形,如果存在,则找到边界长度最小的简单多边形。

输入格式

程序从标准输入读取数据。输入的第一行包含一个整数 $n$ ($3 \le n \le 20,000$),表示线段的数量。接下来的 $n$ 行,每行包含三个整数 $x_1, x_2$ 和 $y_2$ ($1 \le x_1, x_2, y_2 \le 10^6$),分别代表线段的两个端点 $(x_1, 0)$ 和 $(x_2, y_2)$。注意,所有线段的端点都是不同的,即没有任何两个端点位于相同的位置。

输出格式

程序输出到标准输出。仅打印一行。如果给定线段集合存在简单多边形,则输出一个保留一位小数的实数,表示边界长度最小的简单多边形的边界长度;否则输出 -1。

样例

样例输入 1

4
1 1 2
2 2 1
3 3 1
4 4 2

样例输出 1

12.0

样例输入 2

4
1 1 2
2 3 2
5 4 1
7 1 4

样例输出 2

19.3

样例输入 3

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

样例输出 3

-1

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.