计算几何——圆卡精度cf1059D
double 在1e17以后就不能顾及小数,所以用一下加精度的技巧
sqrt(r*r-d*d)=sqrt(r+d)*sqrt(r-d)
遇到误差在几位以内的注意要修改二分的精度,用最大的数据去乘以精度即可
#include<bits/stdc++.h>
using namespace std; const double esp = 1e-;
const double inf = 1e14; double sgn(double x){
if(fabs(x)<esp)return ;
if(x<)return -;
return ;
}
struct Point {
double x,y;
Point(){}
Point (double x,double y):x(x),y(y){}
double distance(Point p){
return hypot(x-p.x,y-p.y);
}
};
struct circle{
Point p;
double r;
circle(){}
circle(Point p,double r):p(p),r(r){}
int relation(Point b){
double dst=b.distance(p);
if(sgn(dst-r)<)return ;
else if(sgn(dst-r)==)return ;
return ;
}
int relationline(double y){//直线只有y=b
double dst=fabs(y-p.y);
if(sgn(dst-r)<)return ;
else if(sgn(dst-r)==)return ;
return ;
}
int pointcrossline(double y,Point &p1,Point &p2){
if(!(*this).relationline(y))return ;
Point a=Point(p.x,y);
double d=fabs(p.y-y);
d=sqrt(r*r-d*d);
if(sgn(d)==){
p1=a,p2=a;
return ;
}
p1=Point(a.x-d,y);
p2=Point(a.x+d,y);
return ;
}
}; #define maxn 100005
Point p[maxn];
int n; //判断半径r是否可行,每个点画个圆和y=r相交,维护L,R即可
int judge(long double r){
long double L=-1e15,R=1e15; for(int i=;i<=n;i++){
if(r*-p[i].y<)return ;
long double d=fabs(r-p[i].y);
d=sqrt(r+d)*sqrt(r-d);//这里要扩大精度
L=max(L,p[i].x-d);R=min(R,p[i].x+d);
}
return L<=R;
} int main(){
cin>>n;
int flag0=,flag1=;
double Min=inf,Max=-inf,M=-inf;
for(int i=;i<=n;i++){
scanf("%lf%lf",&p[i].x,&p[i].y);
if(p[i].y<) flag0=;
else flag1=;
Min=min(Min,p[i].x);Max=max(Max,p[i].x);
M=max(M,fabs(p[i].y));
}
if(flag0 && flag1){puts("-1");return ;}
if(flag0){
for(int i=;i<=n;i++)
p[i].y *= -;
} double l=,r=inf,mid,ans=-,x=max((Max-Min),M)*esp;
while(x<r-l){
mid=(l+r)/;
if(judge(mid))
ans=mid,r=mid;
else l=mid;
}
printf("%.7lf",ans);
}
计算几何——圆卡精度cf1059D的更多相关文章
- ACM 计算几何中的精度问题(转)
http://www.cnblogs.com/acsmile/archive/2011/05/09/2040918.html 计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模 ...
- 51nod 1172 Partial Sums V2 卡精度的任意模数FFT
卡精度的任意模数fft模板题……这道题随便写个表就能看出规律来(或者说考虑一下实际意义),反正拿到这题之后,很快就会发现他是任意模数fft模板题.然后我就去网上抄了一下板子……我打的是最土的任意模数f ...
- 【TOJ 3005】Triangle(判断点是否在三角形内+卡精度)
描述 Given the coordinates of the vertices of a triangle,And a point. You just need to judge whether t ...
- 01背包+卡精度 Hdu 2955
<span style="color:#3333ff;">/* ---------------------------------------------------- ...
- UVA - 10200 Prime Time 关于 double类型 卡精度
题意: 给定一个区间,a到b, n在区间内,有一个计算素数的公式,n*n+n+41,将n带进去可以得出一个数字.但是这个公式可能不准确,求出这个公式在这个区间内的准确率. 直接模拟就好了,不过要 注意 ...
- 计算几何-LA2218-HPI-第一次卡精度-vijos1087-铁人三项
This article is made by Jason-Cow.Welcome to reprint.But please post the writer's address. http://ww ...
- HDU 3264 Open-air shopping malls (计算几何-圆相交面积)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3264 题意:给你n个圆,坐标和半径,然后要在这n个圆的圆心画一个大圆,大圆与这n个圆相交的面积必须大于等 ...
- 2020牛客暑期多校训练营 第二场 B Boundary 计算几何 圆 已知三点求圆心
LINK:Boundary 计算几何确实是弱项 因为好多东西都不太会求 没有到很精通的地步. 做法很多,先说官方题解 其实就是枚举一个点 P 然后可以发现 再枚举一个点 然后再判断有多少个点在圆上显然 ...
- CDOJ 1330 柱爷与远古法阵【高斯消元,卡精度】
柱爷与远古法阵 Time Limit: 125/125MS (Java/Others) Memory Limit: 240000/240000KB (Java/Others) Submit S ...
随机推荐
- html清除页面缓存
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" ...
- 如何恢复误删的OneNote页面
今天不小心把半个月的日记删掉了!(为了减少页面数量,每个月的日记会放在同一个页面上). 幸运的是OneNote有自动备份功能,喜极而泣. 操作方法来自微软支持 打开丢失了最近笔记的笔记本. 单击“文件 ...
- Eureka配置详解(转)
Eureka客户端配置 1.RegistryFetchIntervalSeconds 从eureka服务器注册表中获取注册信息的时间间隔(s),默认为30秒 2.InstanceInfoR ...
- pandas-pd.read_csv
read_csv()接受以下常见参数: 参数 中文名 参数类型 默认参数 参数功能 说明 filepath_or_buffer various :文件路径.URL.或者 是read()函数返回的对 ...
- django 模型ManyToMany 关联的添加,删除,查询
models.py文件内容: from django.db import models class person(models.Model): name = CharField(max_length= ...
- java 删除文件
-------------------------------------对于有多层内容的文件夹来说,要彻底删除的话,就需要编写代码进行迭代操作---------------------------- ...
- storm集群的安装
storm图解 storm的基本概念 Topologies:拓扑,也俗称一个任务 Spoults:拓扑的消息源 Bolts:拓扑的处理逻辑单元 tuple:消息元组,在Spoults和Bolts传递数 ...
- ETL详解
ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析依据. ETL是BI项目重要的一个环节. 通常情况下,在 ...
- [JZOJ 5819] 大逃杀
题意:求一个树上背包~~ 先贴代码存一下,好像打挂了. #include <bits/stdc++.h> using namespace std; const int maxn = 400 ...
- Mac OS 快速查询技巧
今天不知道按到什么快捷键弹出了这个搜索框,试了试很强大 后来查了才知道要双击键盘上的key (⌘)就会弹出,这个搜索很强大,要先安装QQ,QQ自带的 版权声明:本文为博主原创文章,未经博主允许不得转载 ...