1913: [Apio2010]signaling 信号覆盖

Time Limit: 20 Sec  Memory Limit: 64 MB
Submit: 1583  Solved: 646
[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。

题意就是求任选三个点围成一个圆,圆内包含的点数的期望
可以由 sum/C(n,3) 得到,那么要求的就是sum即任选三个点构成圆包含点的个数的总和
暴力枚举肯定不行,。。
网上的题解说的是求凹凸四边形个数,开始不是很懂,后来莫名其妙懂了。
我的理解是:
对于任意的一个三点确定的圆,如果它其中包含了一些点,那么这三点和里面包含的任意一点可以构成四边形
如果是凹四边形,只可能由外边的三点形成圆包含它
如果是凸四边形,对于同一个四边形来说可能有两种形成圆的方式使得圆包含这四个点
所以寻找四边形个数就可以了,关键就是把每个四边形看成了三个点形成一个圆+一个点在圆内贡献的答案

凸四边形数s2不好处理,可以处理凹四边形s1的个数,s1+s2=C(n,4)可以算出s2

处理凹四边形,用四边形总数-凸的个数
枚举每一个点作为凹四边形里面的点,考虑另外三点:
如果要构成凹四边形,那么一定有两条边的角度大于180,枚举每一个点,找到它的下一个目标点(与他构成角大于180度)计算即可

 #include<bits/stdc++.h>
#define ll long long
#define N 1505
using namespace std;
int n,tp;ll s1,s2;
struct P{
int x,y;double ang;
P operator - (const P &b)const{return (P){x-b.x,y-b.y};}
bool operator < (const P &b)const{return ang<b.ang;}
}a[N],q[N];
ll crs(P a,P b){return (ll)a.x*b.y-(ll)a.y*b.x;}
ll solve(int x){
tp=;
ll all=1ll*(n-)*(n-)*(n-)/;
for(int i=;i<=n;i++){
if(i==x)q[]=a[i];
else q[++tp]=a[i];
}
for(int i=;i<=tp;i++){
P tmp=q[i]-q[];
q[i].ang=atan2(tmp.y,tmp.x);
}
sort(q+,q++tp);
int p=,cnt=;
for(int i=;i<=tp;i++){
while(crs(q[i]-q[],q[p]-q[])>=){
p=p%tp+;cnt++;
if(p==i)break;
}
all-=cnt*(cnt-)/;cnt--;
}
return all;
}
int main(){
scanf("%d",&n);
if(n==){puts("3.00");return ;}
for(int i=;i<=n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
for(int i=;i<=n;i++)s1+=solve(i);
s2=1ll*n*(n-)*(n-)*(n-)/-s1;
double ans=*s2+s1;ans/=1ll*n*(n-)*(n-)/;
printf("%.6lf",ans+);
return ;
}

bzoj1913[Apio2010]signaling 信号覆盖 计算几何的更多相关文章

  1. bzoj1913: [Apio2010]signaling 信号覆盖

    传送门 题解传送门 //Achen #include<algorithm> #include<iostream> #include<cstring> #includ ...

  2. 【BZOJ-1913】signaling信号覆盖 极角排序 + 组合

    1913: [Apio2010]signaling 信号覆盖 Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1232  Solved: 506[Subm ...

  3. 【bzoj1913】 Apio2010—signaling 信号覆盖

    http://www.lydsy.com/JudgeOnline/problem.php?id=1913 (题目链接) 题意 给出一个平面上n个点,求任选3个点画一个圆所包含的点的期望值. Solut ...

  4. 【BZOJ】1913: [Apio2010]signaling 信号覆盖(计算几何+计数)

    题目 传送门:QWQ 分析 人类智慧题,不会做...... 详细题解1      详细题解2 总体思路是考虑四边形 讨论凹四边形凸四边形,最后加一个单调性优化省掉个$ O(n) $ 代码 代码感觉好短 ...

  5. bzoj 1913: [Apio2010]signaling 信号覆盖【旋转卡壳(?)】

    参考:https://blog.csdn.net/qpswwww/article/details/45334033 讲的很清楚 做法比较像旋转卡壳但是具体是不是我也不清楚.. 首先知道只要求出每种方案 ...

  6. [BZOJ1913][APIO2010]信号覆盖(计算几何+计数)

    1913: [Apio2010]signaling 信号覆盖 Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1658  Solved: 672[Subm ...

  7. [BZOJ 1913] signaling 信号覆盖

    Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1913 TIP:(注意,这题只能输出6位才能过,7位都不行wtf?) Algorithm: ...

  8. [BZOJ1911][BZOJ1912][BZOJ1913]APIO2010解题报告

    特别行动队 Description   这个好像斜率优化不是一般地明显了啊...只不过要分a的正负两种情况考虑是维护上凸还是下凸 /********************************** ...

  9. 家用wifi信号覆盖增强扩展实用指南

    家用wifi信号覆盖增强扩展实用指南 现在网上很多号称穿墙王的无线路由器,但是一般用起来效果都不理想,其实最主要的原因还是家里面一般每个房间不大,但是墙比较多.并且一般也没有一个所谓的中心点放置路由器 ...

随机推荐

  1. 一个C&C++程序的生命历程

    翻了好多博客,内容星星点点,没找到我想要的,现在吸取大神精华,加上本人拙见,总结如下: 一个C或C++程序从你开始编写,到结束,整个过程,都做了些什么,请看下文: 先看大体的过程:看图: 我在这里主要 ...

  2. [ZLXOI2015]殉国

    2057. [ZLXOI2015]殉国 http://cogs.pro/cogs/problem/problem.php?pid=2057 ★☆   输入文件:BlackHawk.in   输出文件: ...

  3. 在360、UC等浏览器,img不加载原因

    问题:图片在360浏览器不被加载,在UC浏览器强制不显示. 前言不多说,直接上图. 360浏览器显示情况: UC浏览器显示情况: 由以上两张截图可以看到,在360浏览器,banner图片处根本没有加载 ...

  4. 前端双引号单引号,正则反向引用,js比较jq

    1.js,jq,css,html属性必须双,如果同时出现需要嵌套使用,属性的规范是双但是也可以用单测试有效 单引号现象举例:jq中获取元素标签是单引号:$('input').click:弹出也是单引号 ...

  5. Web Api 使用模型验证

    public class Person { public int Id { get; set; } [Required(ErrorMessage = "姓名不能为空啊啊啊!")] ...

  6. cookieUtil

    public class CookieUtil { /** * 设置cookie * @param name cookie名字 * @param value cookie值 * @param maxA ...

  7. Docker学习笔记 - 创建私有的镜像仓库

    一.查找镜像仓库 https://hub.docker.com/ 二.下载镜像仓库 docker pull registry:2.6.2 三.安装镜像仓库 docker run -d -p 6000: ...

  8. python与mongodb的交互 增删改差

    首先引入包: pip install pymongo需要用到如下对象: MongoClient对象:用于与MongoDB服务器建立连接 client=MongoClient('主机ip',端口) Da ...

  9. spring cloud之坑,访问服务时找不到报404

    主要是因为: 启动时 而我访问时,api是按照下面这样访问的: 所以报404找不到

  10. spring data redis template GenericJackson2JsonRedisSerializer的使用

    配置 <!-- redis template definition --> <bean id="myRedisTemplate" class="org. ...