• 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题喽

  • 相关阅读:
    (转) c/c++调用libcurl库发送http请求的两种基本用法
    (转)unordered_map与map的对比(C++11新特性)
    libevent简单介绍
    libevent入门
    日期转换成字符串
    LinkServer
    GridView小记
    SoapHeader
    Credential
    Notepad++ Emmet/Zen coding插件的安装
  • 原文地址:https://www.cnblogs.com/joyouth/p/5448334.html
Copyright © 2020-2023  润新知