QOJ.ac

QOJ

Time Limit: 2 s Memory Limit: 256 MB Total points: 100

#1196. 趣味区域

Statistics

Ciel 博士住在一个有着多边形海岸线的平面岛屿上。她喜欢沿着螺旋路径在岛上漫步。 在这里,如果一条路径满足以下两个条件,则被称为螺旋路径: 该路径是一条没有自交的简单平面折线。 在路径的所有顶点处,线段的方向均向顺时针方向转动。

下图展示了四条路径。圆点标记代表出发点,箭头代表路径的终点。在这些路径中,只有最左侧的一条是螺旋路径。

如果对于岛屿海岸线的所有顶点,都存在一条从某点出发、以该顶点为终点,且不穿过海岸线的螺旋路径,那么 Ciel 博士称该点为“有趣点”。在这里,螺旋路径可以接触或重合海岸线。

在下图中,外侧多边形代表海岸线。标有星号的点是有趣点,而标有叉号的点不是有趣点。从星号出发的虚线折线是通往海岸线顶点的有效螺旋路径。

我们可以证明,所有有趣点构成的集合是一个(可能为空的)连通区域,我们称之为“有趣区域”。给定海岸线,你的任务是编写一个程序来计算有趣区域的面积。

输入格式

输入的第一行包含一个整数 $n$ —— 代表海岸线多边形的顶点数 ($3 \le n \le 2000$)。接下来的 $n$ 行,每行包含两个整数 $x_i$ 和 $y_i$,给出了多边形第 $i$ 个顶点的坐标 $(x_i, y_i)$,按逆时针顺序排列。$x_i$ 和 $y_i$ 均在 $0$ 到 $10^4$ 之间(含边界)。坐标系中,$x$ 轴向右,$y$ 轴向上。该多边形是简单的,即它不自交也不自触。注意,多边形可能是非凸的。保证每个顶点的内角不等于 $180$ 度。

输出格式

输出一行,表示有趣区域的面积。允许的绝对或相对误差不超过 $10^{-7}$。

样例

输入 1

4
10 0
20 10
10 30
0 10

输出 1

300.00

输入 2

10
145 269
299 271
343 193
183 139
408 181
356 324
176 327
147 404
334 434
102 424

输出 2

12658.3130191

输入 3

6
144 401
297 322
114 282
372 178
197 271
368 305

输出 3

0.0

说明

下图可视化了上述三个样例。外侧多边形对应岛屿的海岸线。有趣区域显示为灰色部分。

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.