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. BZOJ 3319 黑白树 并查集+线段树

    这这这这这这什么毒瘤题!!!!!!!!!!!!!!!!!!!!!!!!!!!! 卡LCT(优秀的LCT由于是均摊本身就带着2,3的常数在,而且这道题对于LCT标记十分难维护,又得乘上4,5然后就炸了) ...

  2. HDU3605:Escape(状态压缩+最大流)

    Escape Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  3. POJ1459:Power Network(多源点多汇点的最大流)

    Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 31086   Accepted: 15986 题 ...

  4. eclipse调试java技巧

    详细内容请看: http://www.oschina.net/question/82993_69439

  5. uva 11427

    题目大意:每天晚上你都玩纸牌,如果第一次赢了就高高兴兴地去睡觉:如果输了就接着玩,假设每盘游戏获胜的的概率都是p,且各盘游戏相互独立.你是一个固执的完美主义者,因此会一直玩到当晚获胜局数的比例严格大于 ...

  6. PHP正则经典漏洞

    @author: Dlive P牛在小密圈中发的一个有关使用PHP正则配合写配置文件导致Getshell的经典漏洞 漏洞代码是这样的: <?php //ph.php $str = addslas ...

  7. python基础之函数(自定义函数)

    函数: 函数的定义: 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的函数. ...

  8. [Leetcode Week2]Sort List

    Sort List题解 题目来源:https://leetcode.com/problems/sort-list/description/ Description Sort a linked list ...

  9. bayer转dng实现过程记录

    前言 项目中需要将imx185出来的raw数据转成dng格式,一开始认为很简单的事情,后面才发现还是挺复杂的!!!首先考虑的是不写任何代码,直接用adobe提供的转换工具来转,结果发现,不仅是adob ...

  10. linux system函数分析

    system函数是在应用编程里面想调用外部命令时最方便的方式了,除非想要获取命令行执行的输出信息, 那system就不行了,需要用popen.但是system内部具体怎么实现及怎么处理它的返回值经常被 ...