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. Website Collection

    前一百个卡特兰数 Candy?的博弈论总结 杜教筛资料 线性基资料 (ex)BSGS资料 斐波那契数列前300项 斯特林数 STL标准库-容器-unordered_set C++ unordered_ ...

  2. GDB使用小记

    By francis_hao Nov 7,2016   记录GDB常用功能.   GDB可以让你查看一个程序在运行时其内部发生了什么,或者当一个程序崩溃时发生了什么(通过使用GDB查看core dum ...

  3. Codeforces Round #350 (Div. 2) D1

    D1. Magic Powder - 1 time limit per test 1 second memory limit per test 256 megabytes input standard ...

  4. CentOS 安装 debuginfo-install

    安装debuginfo相关的包步骤如下: 1. 修改文件/etc/yum.repos.d/CentOS-Debuginfo.repo中的enabled参数,将其值修改为1 2. 使用命令: yum i ...

  5. 动态性能视图v$session_longops

    v$session_longops This view displays the status of various operations that run for longer than 6 sec ...

  6. 转:增强学习(二)----- 马尔可夫决策过程MDP

    1. 马尔可夫模型的几类子模型 大家应该还记得马尔科夫链(Markov Chain),了解机器学习的也都知道隐马尔可夫模型(Hidden Markov Model,HMM).它们具有的一个共同性质就是 ...

  7. 让VC6.0编译出来的程序支持XP样式或XP风格

    (1)VC6.0编译出来的win32程序不支持winxp样式的原因:微软WINXP系统更新了Comctl32.dll(ver 6.0)这个“XP风格”的控件.为了保留传统的Windows界面风格,特地 ...

  8. MS笔试中的一个关于函数返回的“小”题

    Which of following C++ code is correct ? A. int f() { ); return *a; } B. int *f() { int a[3] = {1,2, ...

  9. 转:Python网页解析:BeautifulSoup vs lxml.html

    转自:http://www.cnblogs.com/rzhang/archive/2011/12/29/python-html-parsing.html Python里常用的网页解析库有Beautif ...

  10. C中的volatile关键字

    volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据.如果没有volatile关键字,则编译器可能优化读取和存储 ...