P14884 [ICPC 2019 Yokohama R] Fun Region

题目描述

Ciel 博士居住在一个海岸线为多边形的平面岛屿上。她喜欢沿着螺旋路径在岛上散步。这里,一条路径被称为**螺旋**路径,如果它满足以下两个条件。 - 该路径是一条简单的平面折线,没有自相交。 - 在其所有顶点处,线段方向均为顺时针转向。 下图描绘了四条路径。圆圈标记表示起点,箭头表示路径的终点。在这些路径中,只有最左边的是螺旋路径。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/dnxj7lkv.png) ::: Ciel 博士认为一个点具有**乐趣**,如果对于岛屿海岸线的所有顶点,都存在一条螺旋路径从该点出发,到达该顶点,且不穿越海岸线。这里,螺旋路径可以接触或重叠于海岸线。 在下图中,外多边形代表海岸线。点 $\star$ 具有乐趣,而点 $\times$ 不具有乐趣。从 $\star$ 出发的虚线折线是有效的螺旋路径,终点为海岸线顶点。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/3428zay4.png) ::: :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/i3j775ri.png) ::: 我们可以证明,所有具有乐趣的点构成一个(可能为空的)连通区域,我们称之为**乐趣区域**。给定海岸线,你的任务是编写一个程序来计算乐趣区域的面积大小。 图 J.1 可视化了下文给出的三个样例。外多边形对应于岛屿的海岸线。乐趣区域显示为灰色区域。

输入格式

输入包含单个测试用例,格式如下。 $$ \begin{aligned} &n \\ &x_1 \ y_1 \\ &\vdots \\ &x_n \ y_n \end{aligned} $$ $n$ 是表示海岸线的多边形的顶点数($3 \le n \le 2000$)。接下来的 $n$ 行中,每行有两个整数 $x_i$ 和 $y_i$,它们给出了多边形第 $i$ 个顶点的坐标 $(x_i, y_i)$,按逆时针顺序排列。$x_i$ 和 $y_i$ 介于 $0$ 到 $10000$ 之间(含)。这里,坐标系的 $x$ 轴指向右,$y$ 轴指向上。多边形是简单的,即它不自交也不自触。注意,多边形可能是非凸的。保证每个顶点的内角不等于 $180$ 度。

输出格式

在一行中输出乐趣区域的面积。允许的绝对误差或相对误差小于 $10^{-7}$。