bzoj1913[Apio2010]signaling 信号覆盖 计算几何
1913: [Apio2010]signaling 信号覆盖
Time Limit: 20 Sec Memory Limit: 64 MB
Submit: 1583 Solved: 646
[Submit][Status][Discuss]
Description

Input
Output
Sample Input
0 2
4 4
0 0
2 0
Sample Output
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 信号覆盖 计算几何的更多相关文章
- bzoj1913: [Apio2010]signaling 信号覆盖
传送门 题解传送门 //Achen #include<algorithm> #include<iostream> #include<cstring> #includ ...
- 【BZOJ-1913】signaling信号覆盖 极角排序 + 组合
1913: [Apio2010]signaling 信号覆盖 Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 1232 Solved: 506[Subm ...
- 【bzoj1913】 Apio2010—signaling 信号覆盖
http://www.lydsy.com/JudgeOnline/problem.php?id=1913 (题目链接) 题意 给出一个平面上n个点,求任选3个点画一个圆所包含的点的期望值. Solut ...
- 【BZOJ】1913: [Apio2010]signaling 信号覆盖(计算几何+计数)
题目 传送门:QWQ 分析 人类智慧题,不会做...... 详细题解1 详细题解2 总体思路是考虑四边形 讨论凹四边形凸四边形,最后加一个单调性优化省掉个$ O(n) $ 代码 代码感觉好短 ...
- bzoj 1913: [Apio2010]signaling 信号覆盖【旋转卡壳(?)】
参考:https://blog.csdn.net/qpswwww/article/details/45334033 讲的很清楚 做法比较像旋转卡壳但是具体是不是我也不清楚.. 首先知道只要求出每种方案 ...
- [BZOJ1913][APIO2010]信号覆盖(计算几何+计数)
1913: [Apio2010]signaling 信号覆盖 Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 1658 Solved: 672[Subm ...
- [BZOJ 1913] signaling 信号覆盖
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1913 TIP:(注意,这题只能输出6位才能过,7位都不行wtf?) Algorithm: ...
- [BZOJ1911][BZOJ1912][BZOJ1913]APIO2010解题报告
特别行动队 Description 这个好像斜率优化不是一般地明显了啊...只不过要分a的正负两种情况考虑是维护上凸还是下凸 /********************************** ...
- 家用wifi信号覆盖增强扩展实用指南
家用wifi信号覆盖增强扩展实用指南 现在网上很多号称穿墙王的无线路由器,但是一般用起来效果都不理想,其实最主要的原因还是家里面一般每个房间不大,但是墙比较多.并且一般也没有一个所谓的中心点放置路由器 ...
随机推荐
- EL表达式 与 servlvet3.0的新规范
EL表达式 EL表达式 是一种简化的数据访问方式,是对jsp脚本的简化 . 如我们在一个页面中需要输出session的保存的一个值: <% out.println(session.getAt ...
- PHP之this和self
self在对象中自己调用自己使用 $this在实例化后使用$this方法 在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就 ...
- ajax和jquery使用技巧
1.使用ajax的方法的时候可以使用u方法来获取连接,这样更加安全:alert弹窗的时候需要单引号双引号火狐浏览器会报错!
- Python内置函数(40)——dir
英文文档: dir([object]) Without arguments, return the list of names in the current local scope. With an ...
- Python内置函数(35)——next
英文文档: next(iterator[, default]) Retrieve the next item from the iterator by calling its __next__() m ...
- gogs详细配置
sudo apt-get update sudo apt-get upgrade sudo adduser git //创建用户 密码 ******* su git//切换到git用户 cd ~ ...
- redis入门(02)redis的常见问题
一.常见问题 1.安装遇到/bin/sh: cc: command not found 解决办法:安装gcc yum install gcc 2.后台启动server端 2.1.问题现象 2.2.解决 ...
- Spark入门(1-3)Spark的重要概念
1.什么是弹性分布式数据集? Spark提出了RDD(Resilient Distributed Datasets)这么一个全新的概念,RDD弹性分布式数据集是并行.容错的分布式数据结构:可以将RDD ...
- apigw鉴权分析(1-1)阿里数加 - 鉴权方式分析
一.访问方式 1.访问阿里云首页 https://www.aliyun.com/?utm_medium=text&utm_source=bdbrand&utm_campaign=bdb ...
- Swing使用JavaFXweb组件
概述 swing中内嵌入web组件的 需要使用一些其他的jar包 ,但是如果使用javafx的组件,那么也比较的方便,性能也比较高. 代码 webview 在javafx 中是作为 scene出现的所 ...