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信号覆盖增强扩展实用指南 现在网上很多号称穿墙王的无线路由器,但是一般用起来效果都不理想,其实最主要的原因还是家里面一般每个房间不大,但是墙比较多.并且一般也没有一个所谓的中心点放置路由器 ...
随机推荐
- Python内置函数(36)——reversed
英文文档: reversed(seq) Return a reverse iterator. seq must be an object which has a __reversed__() meth ...
- WPF 自定义ItemsControl/ListBox/ListView控件样式
一.前言 ItemsControl.ListBox.ListView这三种控件在WPF中都可作为列表信息展示控件.我们可以通过修改这三个控件的样式来展示我们的列表信息. 既然都是展示列表信息的控件,那 ...
- restful架构风格设计准则(五)用户认证和session管理
读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者! Authentication REST提倡无状态约束,这就要求:用户状态 ...
- 赛码网算法: 军训队列( python实现 )
军训队列 题目描述某大学开学进行军训队列训练,将学生从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列剩下的依次向前靠拢,再从头开始进行一至三报数,凡报到三的出 ...
- The python debugger(PDB)的简介
转自:http://www.cnblogs.com/wei-li/archive/2012/05/02/2479082.html 学习Python调试,最好的资料当然是官方文档和(pdb)help了, ...
- POJ-1511 Invitation Cards---Dijkstra+队列优化+前向星正向反向存图
题目链接: https://vjudge.net/problem/POJ-1511 题目大意: 给定节点数n,和边数m,边是单向边. 问从1节点出发到2,3,...n 这些节点路程和从从这些节点回来到 ...
- Object.prototype.toString.call(obj)使用方法以及原理
这几天看vue-router的源码 发现了Object.prototype.toString.call()这样的用法,当时以为这就是转成字符串的用的,但是越看越觉得不太对劲,赶紧查查资料,一查才知道没 ...
- 学习React系列(十)——Render Props
解决问题:将行为封装,供多个组件使用(在多个组件之间分享某段代码) 组件中的props属性中包含一个"render"属性(该属性为一个返回值为元素的方法),然后在该组件的rende ...
- [项目推荐] Corcel 让你在 WordPress 中使用 Laravel
你想过可以在 WordPress 中使用 Laravel 或者任意一种 PHP 框架吗? Corcel 可以帮你实现! 开发网站应用就应该是快捷并有趣的.当然了,每个应用都会有它自己的需求和生命周期. ...
- 关于 Rijndael 加密
MSDN https://msdn.microsoft.com/zh-cn/library/system.security.cryptography.rijndaelmanaged(v=vs.110) ...