CF1381E Origami

题目描述

在被一个丑陋的几何题连续 13 次超时打击后,你决定休息一下,做点手工艺放松心情。 现在有一张纸,它的形状是一个简单多边形,共有 $n$ 个顶点。这个多边形可能不是凸多边形,但我们都知道,合格的折纸纸张有一个性质:任意一条水平直线与多边形的边界最多相交两次。 如果你沿着竖直直线 $x=f$ 折叠纸张,折叠后形成的图形面积是多少?折叠时,直线左侧的部分会关于该直线对称地反射到右侧。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1381E/7c0a887e786d875943cedb8599c824aacb33ac7b.png) 你的任务是回答 $q$ 个独立的询问,每个询问给出一个折叠位置 $f_1,\ldots,f_q$。

输入格式

第一行包含两个整数 $n$、$q$($3\le n\le 10^5, 1\le q\le 10^5$),分别表示多边形的顶点数和询问数。 接下来的 $n$ 行,每行包含两个整数 $x_i$、$y_i$($|x_i|, |y_i|\le 10^5$),表示多边形第 $i$ 个顶点的坐标。多边形的每一对相邻点之间有一条边,且 $(x_1, y_1)$ 与 $(x_n, y_n)$ 之间也有一条边。保证多边形非退化,且任意一条水平直线与多边形边界最多相交两次。特别地,没有边是严格水平的。相邻的两条边可以共线。 接下来的 $q$ 行,每行包含一个整数 $f_i$($\min\limits_{j=1}^n(x_j)< f_i< \max\limits_{j=1}^n(x_j)$),表示第 $i$ 次折叠的 $x$ 坐标。保证所有 $f_i$ 互不相同。

输出格式

对于每个询问,输出折叠后纸张的面积 $A_i$。 你的答案被认为是正确的,当且仅当其绝对误差或相对误差不超过 $10^{-4}$。 形式化地,设你的答案为 $a$,标准答案为 $b$,当且仅当 $\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-4}$ 时,答案被接受。

说明/提示

第一个测试,折叠线 $f=-5$: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1381E/fec64fce3a86c788f4837d43540c38f571946533.png) 第二个测试,折叠线 $f=1$: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1381E/e7e3d8d20382ff7916a59c0de15ac0f84f66fbdd.png) 第三个测试,折叠线 $f=-1$: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1381E/737679bae48f956654b312c402864578d8f6b5bf.png) 由 ChatGPT 4.1 翻译