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、对于包含类问题,可以将包含体和被包含点集体考虑

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

最新文章

  1. JavaScript 中 Number()、parseInt()、parseFloat()的区别
  2. 【开源】OSharp框架解说系列(1):总体设计及系列导航
  3. jQuery静态方法noop,camelCase,nodeName,trim使用和源码分析
  4. mysql_建立索引的优缺点 #转自Starzm#
  5. Scala中Iterator允许执行一次
  6. Python中的魔法方法
  7. poj 2631 Roads in the North
  8. Struts2 的 helloworld
  9. CSS权威指南学习笔记 —— 初步认识CSS
  10. Mactype 解决字体出现剃尾
  11. eclipse 插件安装
  12. 认识 getAttribute() setAttribute()
  13. 04_Linux命令
  14. CDI服务
  15. tensorboard OSError:[Errno 22] Invalid argument
  16. Ubuntu18.04下安装Sublime Text3!
  17. LVS、Nginx 及 HAProxy 工作原理
  18. gitlab 502 报错
  19. (原)android系统下绑定Server的时候报MainActivity has leaked ServiceConnection的错误
  20. apache安装时的一些术语

热门文章

  1. BZOJ 3262: 陌上花开 CDQ
  2. [poj 3252]数位dp前导0的处理
  3. 对zip文件进行解压操作和对一个文件进行压缩操作
  4. js中连写两个?:三元运算符语法解释
  5. win7---虚拟wifi无法启动承载网络
  6. 网络流专题练习Day2
  7. Jackson对多态和多子类序列化的处理配置
  8. 8.read读取控制台输入
  9. 在另一个文本框显示input file选择的文件名字
  10. PHP文件环境搭建—EcShop环境搭建