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.

    }

  • 相关阅读:
    Webservice学习之新建一个最简单的Webservice项目
    初学程序一定要养成良好的习惯
    你晚上睡好了吗?
    如何面对失恋?
    多病之秋少言多饮
    转:避开秋季相冲食物
    转:饭后九不要包你保健康
    转:五官不适预示五脏衰弱
    转:过度疲劳的27个信号与预防方法
    foxmail是不是不行了?
  • 原文地址:https://www.cnblogs.com/zzmmm/p/7476546.html
Copyright © 2011-2022 走看看