Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1913

TIP:(注意,这题只能输出6位才能过,7位都不行wtf?)

Algorithm:

此题要从四边形的角度去考虑

对于原图中能形成的任意一个四边形:

1、如为凸四边形,明显只有对角和大于180的那两个角形成的三角形的外接圆能包含第4个点

因此每个凸四边形对答案的贡献为2

2、如为凹四边形,对答案的贡献只有1:被其他三个角形成的三角形包含的点

于是最终结果为:

$\frac{num_{凹四边形}+2num_{凸四边形}}{C_n^3(总方案数)}+3$

由于凹四边形明显比凸四边形更好求

$\frac{num_{凹四边形}+2(C_n^4-num_{凹四边形})}{C_n^3(总方案数)}+3$

在求凹四边形时,对于每一个点,我们只要求出其被几个三角形包含即可

但反向求解明显更方便:求多少个三角形不包含x

其他点以x为原点极角排序,对于每个点计算其ANG~ANG+PI间有多少个点,再统计能生成多少个三角形

Code:

#include <bits/stdc++.h>

using namespace std;
typedef complex<double> point;
typedef long long ll; const int MAXN=5e3;
const double PI=3.1415926535897384626;
int n;
point dat[MAXN];
double ang[MAXN]; ll res=; double C(double a,double b)
{
double ret=;
for(int i=;i<=b;i++)
ret=ret*(a-i+)/i;
return ret;
} void cal(int pos)
{
int len=;
for(int i=;i<=n;i++) //转为极坐标系
if(i!=pos) ang[++len]=atan2((dat[i]-dat[pos]).real(),(dat[i]-dat[pos]).imag()); sort(ang+,ang+len+); ll llen=len,temp=;
for(int i=;i<=llen;i++) //首尾相接序列的基本操作
ang[++len]=ang[i]+*PI; int cur=;
for(int i=;i<=llen;i++)
{
while(cur<=len && ang[cur]<ang[i]+PI) cur++; //维护单调性
if(cur-i->=) temp+=C(cur-i-,);
}
res+=C(n-,)-temp;
} int main()
{
cout.setf(ios::fixed);
cout.precision();
cin >> n;
for(int i=;i<=n;i++) cin >> dat[i].real() >> dat[i].imag(); for(int i=;i<=n;i++) cal(i); cout << (res+(C(n,)-res)*)/C(n,)+3.0;
return ;
}

1、求解凹四边形个数:

反向求解,利用极角排序对每个点求出不包含其的三角形的个数

2、对极坐标系的处理

由于序列是首尾相接的,要将原数组的数+2PI后扩充为原来的两倍,方便处理

3、对于包含类问题,可以将包含体和被包含点集体考虑

考虑它们看作一个整体时的性质

[BZOJ 1913] signaling 信号覆盖的更多相关文章

  1. bzoj1913[Apio2010]signaling 信号覆盖 计算几何

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. BZOJ 3564: [SHOI2014]信号增幅仪 最小圆覆盖

    3564: [SHOI2014]信号增幅仪 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3564 Description 无线网络基站在 ...

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

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

随机推荐

  1. [codeforces/gym/100431/E]KMP关于border的理解

    题目链接:http://codeforces.com/gym/100431/ 考虑到对于一个串β,能cover它的最短的α必然是它的border的某个前缀,或者是这个β本身. 所谓border,就是n ...

  2. Astah画时序图

    Astah画时序图,666 1.生命线 时序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间, 一般用来描述 系统 :如 客户端,代理层,缓存层,服务器层1.....服务器层N,数据库等. ...

  3. Linux Top 命令参数解析

    转载自:http://www.jb51.net/LINUXjishu/34604.html TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户 ...

  4. Fragment使用--文章集锦

    android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态 Android Fragment 真正的完全解析(上) Android Fragment实 ...

  5. bzoj 3190 维护栈

    我们可以将每一辆赛车看成一条直线,斜率为速度,纵截距为初始位置,那么问题就转化为求这n条直线处于最上面的直线.最上面是指在坐标系中,假设从x轴向下看,能看到的直线,只露一个点也算能看见.那么就类似水平 ...

  6. 【Sqlite3】SQLITE3使用总结(转)

    原文转自 https://www.cnblogs.com/wenxp2006/archive/2012/06/04/2535169.html SQL语句操作 介绍如何用sqlite 执行标准 sql  ...

  7. HDU1024(最大M子段和)

    Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  8. strcpy函数的实现【转】

    转自:http://www.cnblogs.com/chenyg32/p/3739564.html 已知strcpy函数的原型是: char *strcpy(char *dst, const char ...

  9. android studio 自定义路径安装报错"You are attempting to install the android SDK

    android studio 自定义路径安装报错"You are attempting to install the android SDK 解决方法: 出现这个提示 主要是安装 Andro ...

  10. centeros7远程访问mysql5.7

    先启动firewall防火墙: service firewalld start 打开3306端口: firewall-cmd --add-port=/tcp --permanent mysql授权ro ...