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的更多相关文章

  1. ACM 计算几何中的精度问题(转)

    http://www.cnblogs.com/acsmile/archive/2011/05/09/2040918.html 计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模 ...

  2. 51nod 1172 Partial Sums V2 卡精度的任意模数FFT

    卡精度的任意模数fft模板题……这道题随便写个表就能看出规律来(或者说考虑一下实际意义),反正拿到这题之后,很快就会发现他是任意模数fft模板题.然后我就去网上抄了一下板子……我打的是最土的任意模数f ...

  3. 【TOJ 3005】Triangle(判断点是否在三角形内+卡精度)

    描述 Given the coordinates of the vertices of a triangle,And a point. You just need to judge whether t ...

  4. 01背包+卡精度 Hdu 2955

    <span style="color:#3333ff;">/* ---------------------------------------------------- ...

  5. UVA - 10200 Prime Time 关于 double类型 卡精度

    题意: 给定一个区间,a到b, n在区间内,有一个计算素数的公式,n*n+n+41,将n带进去可以得出一个数字.但是这个公式可能不准确,求出这个公式在这个区间内的准确率. 直接模拟就好了,不过要 注意 ...

  6. 计算几何-LA2218-HPI-第一次卡精度-vijos1087-铁人三项

    This article is made by Jason-Cow.Welcome to reprint.But please post the writer's address. http://ww ...

  7. HDU 3264 Open-air shopping malls (计算几何-圆相交面积)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3264 题意:给你n个圆,坐标和半径,然后要在这n个圆的圆心画一个大圆,大圆与这n个圆相交的面积必须大于等 ...

  8. 2020牛客暑期多校训练营 第二场 B Boundary 计算几何 圆 已知三点求圆心

    LINK:Boundary 计算几何确实是弱项 因为好多东西都不太会求 没有到很精通的地步. 做法很多,先说官方题解 其实就是枚举一个点 P 然后可以发现 再枚举一个点 然后再判断有多少个点在圆上显然 ...

  9. CDOJ 1330 柱爷与远古法阵【高斯消元,卡精度】

    柱爷与远古法阵 Time Limit: 125/125MS (Java/Others)     Memory Limit: 240000/240000KB (Java/Others) Submit S ...

随机推荐

  1. C#常用设计模式

    1.单例模式 单例模式恐怕是很多开发人员最先接触到的模式之一,可以认为就是一个全局变量.它的初始化过程无非就是一开始就new 一个instance,或者惰性初始化等需要用到的时候new 一个insta ...

  2. 使用kubeadm 搭建高可用集群 多master

    很快很简单 只要三分钟就能看完 三台服务器 k8s-vip  负载均衡器 k8s-master1 主节点一 k8s-master2 主节点一 官方文档 首先搭建负载均衡器 用的Haproxy yum ...

  3. re.match与re.search的区别

    re.match与re.search的区别 re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None:而re.search匹配整个字符串,直到找到一个匹配. 实 ...

  4. dfs版容斥原理+剪枝——bzoj1853

    学了一种爆搜版+剪枝的容斥方法,即类似数位dp时按位进行容斥,同时需要在搜索过程中进行剪枝 /* 容斥原理,先在打出的表里筛掉所有倍数,然后用容斥原理+1个的倍数-2个lcm的倍数+3个lcm的倍数. ...

  5. NX二次开发-比较两个string是否相等

    NX11+VS2013 #include <uf.h> #include <uf_ui.h> UF_initialize(); string A = "ABC&quo ...

  6. Dll注入技术之注册表注入

    DLL注入技术之REG注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...

  7. 转-C/C++ new与malloc区别

    1.属性 new/delete是C++关键字,需要编译器支持.malloc/free是库函数,需要头文件支持. 2.参数 使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计 ...

  8. Typora--终于找到一个能够解决将csdn文章同步到hexo的完美编辑器(解决csdn图片防盗链导致无法直接复制文章的问题)。

    文章目录 需求 背景 新宠 告诉我,我的名字叫什么?大声点我听不见~ 页面 神奇之处 看得见的优点 如何设置项目根目录 如何显示图片? 于是最终操作流程 个人博客:https://mmmmmm.me ...

  9. (转)python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

    阅读目录 1.1.1导入模块 1.1.2__name__ 1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代 ...

  10. Apache Solr 远程命令+XXE执行漏洞(CVE-2017-12629)

    Apache Solr 最近有出了个漏洞预警,先复习一下之前的漏洞 命令执行 先创建一个listener,其中设置exe的值为我们想执行的命令,args的值是命令参数 POST /solr/demo/ ...