bzoj 1913: [Apio2010]signaling 信号覆盖【旋转卡壳(?)】
2024-10-21 14:18:02
参考: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;
}
最新文章
- bzoj2653: middle
- 实战Centos系统部署Codis集群服务
- mvc:view-controller
- CentOS7使用VPN上网
- jQuery渐隐渐出的文字提示
- 黑马程序员:Java基础总结----反射
- Struts2内部执行过程
- hdu5444(模拟)
- 开源视频平台:MediaCore(MediaDrop)
- SharePoint 2010 之soap:Server服务器无法处理请求
- 转 - Linux安装python3.6
- Qt自定义滚动条(不使用样式表)
- [angularjs] angularjs系列笔记(一)简介
- 咖啡之约--体验 SourceAnywhere
- laravel项目数据库交互逻辑
- 665. Non-decreasing Array
- 如何使用 Packer 在 Azure 中创建 Windows 虚拟机映像
- 父组件中vuex方法更新state,子组件不能及时更新并渲染的解决方法
- [工具] 各种主流 SQLServer 迁移到 MySQL 工具对比
- .NET Core2.1下采用EFCore比较原生IOC、AspectCore、AutoFac之间的性能
热门文章
- HTTP请求示例
- 一份关于webpack2和模块打包的新手指南(一)
- 寒武纪camp Day4
- SyntaxError: expected expression, got &#39;<;&#39;异常错误
- linux上安装启动elasticsearch-5.5.1完整步骤
- POJ 3488 &;amp; HDU 1915 Arne Saknussemm(模拟)
- [Tools] Create a Chrome Extension
- 抓包工具Fiddler使用宝典之捕获手机报文
- hive计算网页停留时长
- ios开发--NSDate与NSDateFormatter的相关用法【转】