【日常训练】多边形(Pick 定理)

题目描述

  • 小 Z 有一个凸多边形,这个凸多边形的每个顶点都在格点上。如果我们在这个凸多边形的顶点中选择一些点,按照顺时针顺序将相邻的点相连,就会构成一个新的子凸多边形。我们定义,如果一个凸多边形的面积为 0 0 0,那么这个多边形是退化的。小 Z 会在所有没有退化的多边形中随机选择一个。现在他要问你,严格处于这个多边形内部的格点的个数期望值是多少。

  • 注意,若一个点在多边形边上,那么这个点不会被认为严格处于这个多边形内部。只有你输出的答案与标准答案的相对误差或绝对误差不超过 1 0 − 9 10^{-9} 109 时,你的答案才会被认为正确。数据保证给定的凸多边形相邻三点不共线。

算法分析

  • 首先我们要知道,对于一个简单格点多边形,有 Pick’s Theorem \text{Pick's Theorem} Pick’s Theorem

S = A + B 2 − 1 S=A+\frac{B}{2}-1 S=A+2B1

  • 其中 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)=S0E(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=2n1n(2n)2nk1

  • 为了减小精度误差 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=12nn2n(2n)2n2k2n

  • 根据这个可以发现,当 k k k 越来越大时, 2 − k − 2 − n 2^{-k}-2^{-n} 2k2n 就越来越小,当 k > 60 k>60 k>60 时,这个值已经远小于我们所需要的精度要求了,所以我们只要考虑 k ≤ 60 k\le 60 k60 的点对。

  • 因此就可以把时间复杂度优化到 O ( 60 ⋅ n ) \mathcal O(60\cdot n) O(60n)

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(x1x2,y1y2)+1(包括端点)。
    在这里插入图片描述
  • 但是在多边形上,每个端点会重复算一次,因此我们可以让每条边的贡献为 gcd ( ∣ x 1 − x 2 ∣ , ∣ y 1 − y 2 ∣ ) \text{gcd}(|x_1-x_2|,|y_1-y_2|) gcd(x1x2,y1y2),这样端点就能恰好算对。
  • 于是我们同样枚举点对,算这条边上的格点数,然后同样乘以 P k P_k Pk
  • 同理我们只要枚举 k ≤ 60 k\le 60 k60 即可达到精度要求。
  • 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(60nlog109)

附: 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+2BU1=AV+2BV1=SU+SV=AU+AV+c2=BU+BV2c+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+BV2=(AU+AV+c2)+(2BU+BVc+1)1=(AU+AV+c2)+(2BU+BV2c+2)1=AT+2BT1
    • 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
  • 证毕。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值