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.

    }

  • 相关阅读:
    vue中的 computed 和 watch 的区别
    mysql8.0 初始化数据库及表名大小写问题
    sql server alwayson 调整数据文件路径
    zabbix 自定义监控 SQL Server
    mysql 创建用户及授权
    mysql 设置从库只读模式
    mysql8.0 主从复制安装及配置
    centos8.0安装mysql8.0
    centos8替换阿里数据源
    npm publish 报错 【you or one of your dependencies are requesting a package version that is forbidden by your security policy】
  • 原文地址:https://www.cnblogs.com/zzmmm/p/7476546.html
Copyright © 2011-2022 走看看