题目描述
-
小 Z 有一个凸多边形,这个凸多边形的每个顶点都在格点上。如果我们在这个凸多边形的顶点中选择一些点,按照顺时针顺序将相邻的点相连,就会构成一个新的子凸多边形。我们定义,如果一个凸多边形的面积为 0 0 0,那么这个多边形是退化的。小 Z 会在所有没有退化的多边形中随机选择一个。现在他要问你,严格处于这个多边形内部的格点的个数期望值是多少。
-
注意,若一个点在多边形边上,那么这个点不会被认为严格处于这个多边形内部。只有你输出的答案与标准答案的相对误差或绝对误差不超过 1 0 − 9 10^{-9} 10−9 时,你的答案才会被认为正确。数据保证给定的凸多边形相邻三点不共线。
算法分析
- 首先我们要知道,对于一个简单格点多边形,有 Pick’s Theorem \text{Pick's Theorem} Pick’s Theorem:
S = A + B 2 − 1 S=A+\frac{B}{2}-1 S=A+2B−1
- 其中 S S S 表示多边形的面积, B B B 表示多边形边上的格点数, A A A 表示严格在多边形内部的格点数。证明附在文后。
- 根据期望的线性性,我们得到:
E ( A ) = E ( S ) − E ( B ) 2 + 1 E(A)=E(S)-\frac{E(B)}{2}+1 E(A)=E(S)−2E(B)+1
- 问题转化为求 E ( S ) E(S) E(S) 和 E ( B ) E(B) E(B).。
1. 求 E ( S ) E(S) E(S)
- 因为我们是在凸多边形的顶点中选点,所以 E ( S ) = S 0 − E ( S ′ ) E(S)=S_0-E(S') E(S)=S0−E(S′), S 0 S_0 S0 表示原多边形的面积, E ( S ′ ) E(S') E(S′) 表示原多边形中选出的多边形的部分以外的面积,即下图的蓝色部分。
-
那么接下来,我们分别考虑每个蓝色部分的贡献。
-
不难发现,每个蓝色部分都可以唯一对应一个多边形上的有序点对。
-
比如上图的两个蓝色部分我们可以分别表示为 ( F , B ) , ( B , E ) (F,B),(B,E) (F,B),(B,E)
-
考虑对于一个点对 ( u , v ) (u,v) (u,v),对应的蓝色部分多边形包含 k k k 个点,那么这个蓝色部分对 E ( S ′ ) E(S') E(S′) 的贡献应当是: S ( u , v ) ⋅ P k S_{(u,v)}\cdot P_k S(u,v)⋅Pk。
-
其中 S ( u , v ) S_{(u,v)} S(u,v) 表示 ( u , v ) (u,v) (u,v) 对应的蓝色部分多边形的面积, P k P_k Pk 表示 ( u , v ) (u,v) (u,v) 作为选出的多边形的一条边的概率。
-
不难得到 P k = 2 n − k − 1 2 n − 1 − n − ( n 2 ) P_k = \frac{2^{n-k}-1}{2^n-1-n-\binom{n}{2}} Pk=2n−1−n−(2n)2n−k−1。
-
为了减小精度误差 P k = 2 − k − 2 − n 1 − 2 − n − n ⋅ 2 − n − ( n 2 ) ⋅ 2 − n P_k = \frac{2^{-k}-2^{-n}}{1-2^{-n}-n\cdot 2^{-n}-\binom{n}{2}\cdot2^{-n}} Pk=1−2−n−n⋅2−n−(2n)⋅2−n2−k−2−n。
-
根据这个可以发现,当 k k k 越来越大时, 2 − k − 2 − n 2^{-k}-2^{-n} 2−k−2−n 就越来越小,当 k > 60 k>60 k>60 时,这个值已经远小于我们所需要的精度要求了,所以我们只要考虑 k ≤ 60 k\le 60 k≤60 的点对。
-
因此就可以把时间复杂度优化到 O ( 60 ⋅ n ) \mathcal O(60\cdot n) O(60⋅n)。
2. 求 E ( B ) E(B) E(B)
- 我们不难知道,对于两个格点
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
(x_1,y_1),(x_2,y_2)
(x1,y1),(x2,y2),连接它们的边上的个点数就是
gcd
(
∣
x
1
−
x
2
∣
,
∣
y
1
−
y
2
∣
)
+
1
\text{gcd}(|x_1-x_2|,|y_1-y_2|)+1
gcd(∣x1−x2∣,∣y1−y2∣)+1(包括端点)。
- 但是在多边形上,每个端点会重复算一次,因此我们可以让每条边的贡献为 gcd ( ∣ x 1 − x 2 ∣ , ∣ y 1 − y 2 ∣ ) \text{gcd}(|x_1-x_2|,|y_1-y_2|) gcd(∣x1−x2∣,∣y1−y2∣),这样端点就能恰好算对。
- 于是我们同样枚举点对,算这条边上的格点数,然后同样乘以 P k P_k Pk。
- 同理我们只要枚举 k ≤ 60 k\le 60 k≤60 即可达到精度要求。
- 求 gcd \text{gcd} gcd 需要 O ( log 1 0 9 ) \mathcal O(\log 10^9) O(log109),因此时间复杂度 O ( 60 ⋅ n log 1 0 9 ) \mathcal O(60\cdot n\log 10^9) O(60⋅nlog109)。
附: Pick’s Theorem \text{Pick's Theorem} Pick’s Theorem 的证明
- 引理一: 满足
Pick’s Theorem
\text{Pick's Theorem}
Pick’s Theorem 的两个有公共边的简单多边形拼接后的多边形,仍然满足
Pick’s Theorem
\text{Pick's Theorem}
Pick’s Theorem。
- 证明:
- 如下图,已知多边形 A B F G H ABFGH ABFGH (记作 U U U)和多边形 B C D E F BCDEF BCDEF (记作 V V V),满足 Pick’s Theorem \text{Pick's Theorem} Pick’s Theorem。
- 我们要证大多边形(记作 T T T),也满足 Pick’s Theorem \text{Pick's Theorem} Pick’s Theorem。
- 假设它们的公共边上有 c c c 个格点(包括端点)。
- 那么我们有:
S U = A U + B U 2 − 1 S V = A V + B V 2 − 1 S T = S U + S V A T = A U + A V + c − 2 B T = B U + B V − 2 c + 2 \begin{aligned} S_{U} &=A_{U}+\frac{B_{U}}{2}-1 \\ S_{V} &=A_{V}+\frac{B_{V}}{2}-1 \\ S_T&=S_U+S_V \\ A_T &= A_U+A_V+c-2 \\ B_T &= B_U+B_V-2c+2 \end{aligned} SUSVSTATBT=AU+2BU−1=AV+2BV−1=SU+SV=AU+AV+c−2=BU+BV−2c+2 - 所以:
S T = S U + S V = A U + A V + B U + B V 2 − 2 = ( A U + A V + c − 2 ) + ( B U + B V 2 − c + 1 ) − 1 = ( A U + A V + c − 2 ) + ( B U + B V − 2 c + 2 2 ) − 1 = A T + B T 2 − 1 \begin{aligned} S_T&=S_U+S_V\\ &=A_U+A_V+\frac{B_U+B_V}{2}-2\\ &=(A_U+A_V+c-2)+(\frac{B_U+B_V}{2}-c+1)-1\\ &=(A_U+A_V+c-2)+(\frac{B_U+B_V-2c+2}{2})-1\\ &=A_T+\frac{B_T}{2}-1 \end{aligned} ST=SU+SV=AU+AV+2BU+BV−2=(AU+AV+c−2)+(2BU+BV−c+1)−1=(AU+AV+c−2)+(2BU+BV−2c+2)−1=AT+2BT−1 - 即 T T T 也满足 Pick’s Theorem \text{Pick's Theorem} Pick’s Theorem。
- 证毕。
- 引理二: 任意格点三角形满足
Pick’s Theorem
\text{Pick's Theorem}
Pick’s Theorem。
- 证明:
- 显然单位格点正方形满足 Pick’s Theorem \text{Pick's Theorem} Pick’s Theorem。
- 由引理一可得,任意边和坐标轴平行的矩形都满足 Pick’s Theorem \text{Pick's Theorem} Pick’s Theorem。
- 类似引理一的证明,我们可以证得,将这种矩形沿对角线分割成两个直角边平行于坐标轴的直角三角形,这两个直角三角形也是满足 Pick’s Theorem \text{Pick's Theorem} Pick’s Theorem 的。
- 然后我们知道,格点三角形可以表示为如下的形式,即边和坐标轴平行的矩形,去掉几个直角边平行于坐标轴的直角三角形,如下图。
- 类似地,也可证得去掉这种直角三角形,绿色三角形也是满足 Pick’s Theorem \text{Pick's Theorem} Pick’s Theorem 的。
- 证毕。
- 根据引理一和引理二,因为任意简单多边形都可以进行三角剖分,即若干个三角形拼接而成,而这些三角形都以多边形的顶点作为顶点,所以这些三角形满足 Pick’s Theorem \text{Pick's Theorem} Pick’s Theorem ,所以拼接起来的多边形也满足 Pick’s Theorem \text{Pick's Theorem} Pick’s Theorem。
- 证毕。