参考: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;
}

bzoj 1913: [Apio2010]signaling 信号覆盖【旋转卡壳(?)】的更多相关文章

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

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

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

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

  3. 洛谷 P3187 BZOJ 1185 [HNOI2007]最小矩形覆盖 (旋转卡壳)

    题目链接: 洛谷 P3187 [HNOI2007]最小矩形覆盖 BZOJ 1185: [HNOI2007]最小矩形覆盖 Description 给定一些点的坐标,要求求能够覆盖所有点的最小面积的矩形, ...

  4. BZOJ 1185: [HNOI2007]最小矩形覆盖 [旋转卡壳]

    1185: [HNOI2007]最小矩形覆盖 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 1435  Solve ...

  5. BZOJ 1185: [HNOI2007]最小矩形覆盖-旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标-备忘板子

    来源:旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标 BZOJ又崩了,直接贴一下人家的代码. 代码: #include"stdio.h" #include"str ...

  6. bzoj 1185 [HNOI2007]最小矩形覆盖——旋转卡壳

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1185 矩形一定贴着凸包的一条边.不过只是感觉这样. 枚举一条边,对面的点就是正常的旋转卡壳. ...

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

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

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

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

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

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

随机推荐

  1. 【Java源码】集合类-LinkedList

    一.类继承关系 LinkedList和ArrayList都实现了List接口.所以有List的特性,同时LinkedList也实现了Deque,所以它也具有双端队列和栈的特性. public clas ...

  2. response对象学习

    import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpSer ...

  3. 2018.11.3 PION模拟赛

    期望:100    实际:100 #include<cstdio> #include<cstring> #include<iostream> #include< ...

  4. windows 平台使用wireshark命令行抓包

    Windows网络流量大,或则需要长时间抓包时,wireshark图形界面使用起来比较麻烦 wireshark 内置 dumpcap命令 Capture interface:  -i <inte ...

  5. 教你如何查看CAD文件是哪个版本的来自http://blog.sina.com.cn/s/blog_4c9fa4dd0101il1v.html

    教你如何查看CAD文件是哪个版本的 http://blog.sina.com.cn/s/blog_4c9fa4dd0101il1v.html (2013-03-10 22:24:52) 转载▼ 标签: ...

  6. 【网络】TCP的流量控制

    一.利用滑动窗口实现流量控制 流量控制是让发送方的发生速率不要太快,要让接收方来得及接收. 发送方的发送窗口不能超过接收方给出的接收窗口的数值,TCP的窗口单位是字节,不是报文段. TCP为每一个连接 ...

  7. Phalcon 开发工具(Phalcon Developer Tools)

    Phalcon提供的这个开发工具主要是用来辅助开发,比方生成一些程序的基本框架.生成控制器模型等. 使用这个工具我们仅仅须要一个简单的命令就可以生成应用的基本框架. 很重要: 要使用这个工具我们必需要 ...

  8. 自己定义验证器——用Struts2框架以框架师的思维灵活做好该事情

    面对的问题:自己定义一个18位身份验证器.编写验证器.在validators.xml文件里进行注冊.在验证配置文件里使用? 第一部分:理解Struts2中自带的验证器 第二部分:如何通过server( ...

  9. Python爬虫开发【第1篇】【爬虫案例】

    案例一:网站模拟登录 # douban.py from selenium import webdriver from selenium.webdriver.common.keys import Key ...

  10. grep命令最经常使用的功能总结

    1. grep最简单的用法,匹配一个词:grep word filename 2. 能够从多个文件里匹配:grep word filename1 filenam2 filename3 3. 能够使用正 ...