参考:https://blog.csdn.net/qpswwww/article/details/45334033 讲的很清楚

做法比较像旋转卡壳但是具体是不是我也不清楚..

首先知道只要求出每种方案在圆上和圆中的和就可以。

注意到题目中有一个限制:“保证任何三个房子都不在同一条直线 上,任何四个房子都不在同一个圆上。”,所以考虑构成圆的三个点和需要判断的第四个点组成的四边形:

对于凹四边形,只有一种情况,第四个点一定在圆内;

对于凸四边形,第四个点可能在园中,圆上,圆外,其中园中,圆上是符合条件的。

又,总的四边形个数是\( C_n^4 \),所以只求得凸四边形的个数即可。

把凸四边形看做一个三角形中有一个点,现在需要找出没有覆盖这个点的三角形,枚举中间这个点,然后把其他点按这个点极角排序,枚举三角形上的一个点,用旋转卡壳一样的东西取卡另外两个点的可选区间,然后用\( C_{n-1}^3 \)减去这个数加进ans里即可。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=3005;
int n;
long long ans;
double p[N];
struct dian
{
double x,y;
dian(double X=0,double Y=0)
{
x=X,y=Y;
}
dian operator - (const dian &a) const
{
return dian(x-a.x,y-a.y);
}
}a[N];
long long C(long long n,long long m)
{
long long r=1ll,c=1ll;
for(int i=0;i<m;i++)
r*=(n-i);
for(int i=1;i<=m;i++)
c*=i;
return r/c;
}
void wk(int x)
{
int top=0;
for(int i=1;i<=n;i++)
if(i!=x)
p[++top]=atan2((a[i]-a[x]).y,(a[i]-a[x]).x);
sort(p+1,p+1+top);
long long con=0;
for(int i=1;i<n;i++)
p[++top]=p[i]+2*M_PI;
int w=1;
for(int i=1;i<n;i++)
{
w=max(w,i+1);
while(w<=top&&p[w]<p[i]+M_PI)
w++;
if(w-i-1>=2)
con+=C(w-i-1,2);
}
ans+=C(n-1,3)-con;
}
int main()
{
scanf("%d",&n);
if(n<=3)
{
puts("0");
return 0;
}
for(int i=1;i<=n;i++)
scanf("%lf%lf",&a[i].x,&a[i].y);
for(int i=1;i<=n;i++)
wk(i);
printf("%lf\n",(double)(ans+2*(C(n,4)-ans))/(double)C(n,3)+3.0);
return 0;
}

最新文章

  1. bzoj2653: middle
  2. 实战Centos系统部署Codis集群服务
  3. mvc:view-controller
  4. CentOS7使用VPN上网
  5. jQuery渐隐渐出的文字提示
  6. 黑马程序员:Java基础总结----反射
  7. Struts2内部执行过程
  8. hdu5444(模拟)
  9. 开源视频平台:MediaCore(MediaDrop)
  10. SharePoint 2010 之soap:Server服务器无法处理请求
  11. 转 - Linux安装python3.6
  12. Qt自定义滚动条(不使用样式表)
  13. [angularjs] angularjs系列笔记(一)简介
  14. 咖啡之约--体验 SourceAnywhere
  15. laravel项目数据库交互逻辑
  16. 665. Non-decreasing Array
  17. 如何使用 Packer 在 Azure 中创建 Windows 虚拟机映像
  18. 父组件中vuex方法更新state,子组件不能及时更新并渲染的解决方法
  19. [工具] 各种主流 SQLServer 迁移到 MySQL 工具对比
  20. .NET Core2.1下采用EFCore比较原生IOC、AspectCore、AutoFac之间的性能

热门文章

  1. HTTP请求示例
  2. 一份关于webpack2和模块打包的新手指南(一)
  3. 寒武纪camp Day4
  4. SyntaxError: expected expression, got &#39;&lt;&#39;异常错误
  5. linux上安装启动elasticsearch-5.5.1完整步骤
  6. POJ 3488 &amp;amp; HDU 1915 Arne Saknussemm(模拟)
  7. [Tools] Create a Chrome Extension
  8. 抓包工具Fiddler使用宝典之捕获手机报文
  9. hive计算网页停留时长
  10. ios开发--NSDate与NSDateFormatter的相关用法【转】