zoukankan      html  css  js  c++  java
  • cojs 西瓜 解题报告

    首先我们要知道pick公式

    设二维平面内任意多边形面积为S

    设多边形内部整点数为a

    设多边形边界的整点数为b

    则满足S=a+b/2-1

    变形得a=S-b/2+1

    由期望的线性性质我们把问题转化为

    1、求凸包面积的期望

    2、求凸包边界整点数的期望

    首先我们考虑如何算面积,对于任意凸多边形,我们可以以原点为划分点

    对于每条边算叉积,叉积的和就是面积,很容易发现每条边的贡献是可以拆分的

    显然我们可以枚举每条可能的边,对于这条边算他存在凸包的概率并乘以相应的贡献就可以辣

    一共有n^2条边,所以这部分时间复杂度为O(n^2)

    之后我们考虑如何算边界整点数的期望,更容易发现每条的边的贡献是可以拆分的

    跟上面一个做法就可以了

    至于每条边存在凸包的概率嘛,我就不再细说了

    很容易推倒的公式,用心推一推就出来了

    假设你已经知道概率的公式了

    Em 好啦,我们现在来说一说O(n)的做法

    很容易发现随着我们枚举的边的两个端点中间的点数的扩大,概率会越来越小

    当概率不会对答案产生精度误差时,我们就可以不用计算辣

    这就是O(n)的算法了

    最后的最后一定要注意不能选退化的凸包,所以算概率的时候要考虑进去

    PS:由于本人太辣鸡,并不能做出很大的严格凸包,所以这个题目只是简单的idea题喽

  • 相关阅读:
    npm 安装卸载模块 & ionic插件安装与卸载
    Vue中v-model解析、sync修饰符解析
    Vue props用法详解
    vue页面跳转
    Swift 4 中的泛型
    Swift枚举的全用法
    蓝牙 BLE 三种 UUID 格式转换
    SVG图案
    SVG渐变
    SVG坐标系统及图形变换
  • 原文地址:https://www.cnblogs.com/joyouth/p/5448334.html
Copyright © 2011-2022 走看看