zoukankan      html  css  js  c++  java
  • BZOJ1913: [Apio2010]signaling 信号覆盖

    1913: [Apio2010]signaling 信号覆盖

    Time Limit: 20 Sec  Memory Limit: 64 MB
    Submit: 1502  Solved: 615
    [Submit][Status][Discuss]

    Description

    Input

    输入第一行包含一个正整数 n, 表示房子的总数。接下来有 n 行,分别表示 每一个房子的位置。对于 i = 1, 2, .., n, 第i 个房子的坐标用一对整数 xi和yi来表 示,中间用空格隔开。

    Output

    输出文件包含一个实数,表示平均有多少个房子被信号所覆盖,需保证输出 结果与精确值的绝对误差不超过0.01。

    Sample Input

    4
    0 2
    4 4
    0 0
    2 0

    Sample Output

    3.500

    HINT

    3.5, 3.50, 3.500, … 中的任何一个输出均为正确。此外,3.49, 3.51,
    3.499999,…等也都是可被接受的输出。
    【数据范围】
    100%的数据保证,对于 i = 1, 2, .., n, 第 i 个房子的坐标(xi, yi)为整数且
    –1,000,000 ≤ xi, yi ≤ 1,000,000. 任何三个房子不在同一条直线上,任何四个房子不
    在同一个圆上;
    40%的数据,n ≤ 100;
    70%的数据,n ≤ 500;
    100%的数据,3 ≤ n ≤ 1,500。

    思路{

      直接枚举方案计算明显不行.

      不知怎么的就想到了用多边形的方法解决问题.

      发现,一个凸多边形对ans的贡献为2(对角和>180的两个点),凹多边形贡献为1(覆盖凹进去的那个点).

      那么问题转化为求凹多边形的个数.

      我们枚举每一个点,计算以它为中心的凹多边形个数.

      这个极角排序一下,每次找出以该点为中心的两条边夹角最大且<π,那么以下面的边上的点和这中间所有点组合都不会包括中心点,

      用组合数减一下,求出凹多边形的个数,

      再用组合数算出凸多边形的个数即可.

      最后答案包括构成外接圆的3点,所以要加上3.

    }

  • 相关阅读:
    node js的模块
    前端学习ES6
    产品相关
    linux命令
    【jmeter】对于返回结果中文显示?问题
    MAC 本用pip3命令安装openpyxl插件(或者其他插件)后,在Pycharm依然找不到
    pip3版本已经是最新,安装openxl失败,Could not find a version that satisfies the requirement openxl
    MAC本安装python3.8后,pip3命令无法更新问题
    mac安装python环境
    nodejs安装步骤
  • 原文地址:https://www.cnblogs.com/zzmmm/p/7476546.html
Copyright © 2011-2022 走看看