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.

}

posted @ 2017-09-04 23:57  QYP_2002  阅读(239)  评论(0编辑  收藏  举报