P16191 [COI 2018] Svjetlost 光

题目背景

3s,1024MB。

题目描述

在平面上,若我们有一个凸多边形 $P$,并且在多边形外放置一个光源 $T$,那么它会照亮多边形的一些边——如果 $A$ 和 $B$ 是多边形的两个相邻顶点,则边 $AB$ 会被照亮,当且仅当三角形 $TAB$ 的面积不为零,且该边不与多边形内部相交。多边形的亮度定义为被照亮边的长度之和,而多边形的最大亮度是指我们选择最优光源位置 $T$ 所能得到的最大亮度。点 $T$ 与多边形的距离可以任意,$T$ 的坐标不必为整数。 ![](https://cdn.luogu.com.cn/upload/image_hosting/jdl4xl37.png) 图 4:第二个测试用例中的多边形 $P,P_1,P_2$ 和 $P_3$,最优亮度已标出。 给定一个凸多边形 $P$,其顶点依次为 $A_1, A_2, \ldots, A_n$。多边形会在 $q$ 步操作中发生变化——在第 $j$ 步,我们删除一个已有顶点,得到新多边形 $P_j$。更精确地说,多边形 $P_j$ 的顶点是尚未删除的 $P$ 的顶点,并且它们的顺序与原多边形 $P$ 相同。可以看出,每个多边形 $P_j$ 仍然是凸的。 请计算初始多边形 $P$ 及每个得到的多边形 $P_1, P_2, \ldots, P_q$ 的最大亮度。

输入格式

输入的第一行包含正整数 $n$——初始多边形 $P$ 的顶点数。接下来的 $n$ 行,每行包含两个整数 $x_j$ 和 $y_j\ (-10^9\le x_j, y_j \le 10^9)$——顶点 $A_j$ 的坐标。随后一行包含整数 $q\ (0 \le q \le n - 3)$——变化次数。接下来的 $q$ 行,每行包含整数 $k_j\ (1 \le k_j \le n)$,表示第 $j$ 步删除顶点 $A_{k_j}$。可以保证多边形 $P$ 的顶点按逆时针给出,不存在连续平行线,并且所有删除索引 $k_j$ 两两不同。

输出格式

输出 $q + 1$ 行。第一行输出初始多边形 $P$ 的最大亮度,第 $j\ (1 \le j \le q)$ 行输出第 $j$ 步变更后多边形 $P_j$ 的最大亮度。允许输出结果与标准答案的绝对或相对误差不超过 $10^{−5}$。

说明/提示

### 子任务 ::cute-table{three} |编号 |分数 |限制条件 | |:-:|:--:|:--------:| |$1$|$12$|$n\le 100$| |$2$|$14$|$n\le 2000$| |$3$|$14$|$n\le 100\,000,q=0$| |$4$|$29$|$n\le 100\,000$,对所有 $j = 1,\ldots, q − 1$ 有 $k_j < k_{j+1}$| |$5$|$31$|$n\le 100\,000$| 翻译来源:GPT 4.1 mini。