计算几何——圆卡精度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-7;
const double inf = 1e14;double sgn(double x){if(fabs(x)<esp)return 0;if(x<0)return -1;return 1;
}
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)<0)return 2;else if(sgn(dst-r)==0)return 1;return 0;}int relationline(double y){//直线只有y=b double dst=fabs(y-p.y);if(sgn(dst-r)<0)return 2;else if(sgn(dst-r)==0)return 1;return 0;}int pointcrossline(double y,Point &p1,Point &p2){if(!(*this).relationline(y))return 0;Point a=Point(p.x,y);double d=fabs(p.y-y);d=sqrt(r*r-d*d);if(sgn(d)==0){p1=a,p2=a;return 1;}p1=Point(a.x-d,y);p2=Point(a.x+d,y);return 2;}
};#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=1;i<=n;i++){if(r*2-p[i].y<0)return 0; 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=0,flag1=0;double Min=inf,Max=-inf,M=-inf;for(int i=1;i<=n;i++){ scanf("%lf%lf",&p[i].x,&p[i].y);if(p[i].y<0) flag0=1;else flag1=1;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 0;}if(flag0){for(int i=1;i<=n;i++)p[i].y *= -1;}double l=0,r=inf,mid,ans=-1,x=max((Max-Min),M)*esp;while(x<r-l){mid=(l+r)/2;if(judge(mid))ans=mid,r=mid;else l=mid;}printf("%.7lf",ans);
}

 

转载于:https://www.cnblogs.com/zsben991126/p/10948915.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

坦克大战 Java版

由于博客开通不久&#xff0c;以前没有博客&#xff0c;顺便把以前做的项目也介绍下 希望大家支持&#xff0c;谢谢 坦克大战 IDE&#xff1a;MyEclipse 9.0 语言&#xff1a;Java SE 数据库&#xff1a;由于是单机版&#xff0c;不需要较高的安全性&#xff0c;且数据量较小&a…

c# 扩展方法奇思妙用高级篇五:ToString(string format) 扩展

在.Net中&#xff0c;System.Object.ToString()是用得最多的方法之一&#xff0c;ToString()方法在Object类中被定义为virtual&#xff0c;Object类给了它一个默认实现&#xff1a; 1 publicvirtualstringToString()2 {3 returnthis.GetType().ToString();4 }.Net中原生的class…

MFC中OnDraw与OnPaint的区别

OnPaint是WM_PAINT消息的消息处理函数&#xff0c;在OnPaint中调用OnDraw&#xff0c;一般来说&#xff0c;用户自己的绘图代码应放在OnDraw中。 OnPaint()是CWnd的类成员&#xff0c;负责响应WM_PAINT消息。OnDraw()是CVIEW的成员函数&#xff0c;没有响应消息的功能.当视图变…

Windows Internet

网址:http://baike.baidu.com/view/560670.htm WinInet 求助编辑百科名片 WinInet&#xff08;“Windows Internet”&#xff09;API帮助程序员使用三个常见的Internet协议&#xff0c;这三个协议是用于World Wide Web万维网的超文本传输协议&#xff08;HTTP&#xff1a;Hyper…

PHP使用CURL抓取页面

cURL的基本原理 curl是利用URL语法在命令行方式下工作的开源文件传输工具&#xff0c;他能够从互联网上获得各种各样的网络资源。简单来说&#xff0c;curl就是抓取页面的升级版。 <?php//1.初始化&#xff0c;创建一个新cURL资源$ch curl_init(); //2.设置URL和相应的选…

Lync Server 2010迁移至Lync Server 2013故障排错 Part3 :内外网共享PPT提示证书问

最近在公司生产环境中部署Lync Server 2013并对公网发布后&#xff0c;发现公网未加域客户端在与内网用户共享PPT时&#xff0c;会报证书错误&#xff0c;如下图所示&#xff1a;但是内网是正确的&#xff0c;经过查询了一下Lync 客户端自身的日志信息后发现&#xff0c;公网客…

用WinInet开发Internet客户端应用指南

一&#xff1a;http://www.vckbase.com/document/viewdoc/?id545 二&#xff1a;http://www.vckbase.com/document/viewdoc/?id546 用WinInet开发Internet客户端应用指南&#xff08;一&#xff09; 编译/NorthTibet 一、概述一个Internet客户端程序的目的是通过Internet…

WebService的基本概念:java webservice,什么是webservice

WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求&#xff0c;轻量级的独立的通讯技术。 这种技术允许网络上的所有系统进行交互。随着技术的发展&#xff0c;一个Web服务可以包含额外的指定功能并且可以在多个B2B应用中协作通讯。 Web服务可以理解…

掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...

掌握常见的内部排序方法&#xff08;插入排序&#xff0c;冒泡排序&#xff0c;选择排序&#xff0c;快速排序&#xff0c;堆排序&#xff0c;希尔排序&#xff0c;归并排序&#xff0c;基数排序等&#xff09;。数组高级以及Arrays(掌握)排序方法空间复杂度时间复杂度稳定性插…

关于Android错误 View requires API level 14 (current...

2019独角兽企业重金招聘Python工程师标准>>> 问题描述&#xff1a;在界面配置文件main.xml中&#xff0c;可能用上某些控件&#xff08;例如GridLayout&#xff09;遇上下面所说的错误:View requires API level 14(current min is 8), 但将项目clear后&#xff0c;再…

socket-select函数

最近在用socket编程&#xff0c;用到select函数&#xff0c;于是上网查找资料&#xff0c;如下这篇是讲的比较详细易懂的&#xff1a;Select在Socket编程中还是比较重要的&#xff0c;可是对于初学Socket的人来说都不太爱用Select写程序&#xff0c;他们只是习惯写诸如 connect…

javascript 基础 转

最近面试过一些人, 发现即使经验丰富的开发人员, 对于一些基础的理论和细节也常常会模糊. 写本文是因为就我自己而言第一次学习下面的内容时发现自己确实有所收获和感悟. 其实我们容易忽视的javascript的细节还有更多, 本文仅是冰山一角. 希望大家都能通过本文有所斩获.一. Jav…

从表到里学习JVM实现

在社会化分工、软件行业细分专业化的趋势下&#xff0c;会真的参与到底层系统实现的人肯定是越来越少&#xff08;比例上说&#xff09;。真的会参与到JVM实现的人肯定是少数。但如果您对JVM是如何实现的有兴趣、充满好奇&#xff0c;却苦于没有足够系统的知识去深入&#xff0…

2019春第二次课程设计实验报告

2019春第二次课程设计实验报告 一、实验项目名称 用数组实现反弹球消砖块 二、实验项目功能描述 利用键盘按键控制小球方向让小球碰到挡板后反弹上去消除砖块。 三、项目模块结构介绍 四、实现界面展示 五、代码托管链接 https://gitee.com/huangxuannn/events 六、实验总结 上…

[SharePoint 2010] Client Object Model 跨时区查询list item的方法

SharePoint将所有的Datetime类型的数据都以universal的形式(UTC)存储在数据库中&#xff0c;当要在页面上显示类似list item的"Created", "Modified"等时间日期信息时&#xff0c;将数据库中的UTC时间取出来&#xff0c;然后根据当前Site的Regional Settin…

Linux下静态库和动态库的编译连接

http://blog.sina.com.cn/s/blog_4090ba590100t3nu.html .a文件 gcc -c test.c ar rc libtest.a test.o ranlib libtest.a 静态库只要编译出.o文件然后用ar打入包中就可以 动态库或共享库不用libtool工具&#xff1a; gcc -fpic -o test.o -c test gcc -shared -o te…

修改终端服务端口的方法

修改终端服务端口的方法Windows 2000 下的修改办法   win2k的终端服务可以运行在两种方式下&#xff1a;远程管理或应用程序服务器模式。   远程管理模式&#xff1a;允许一定数量的管理员远程管理这个服务器&#xff0c;这个模式对服务器性能的影响程度最低。   应用程序…

PYTHON -c

命令行执行代码转载于:https://www.cnblogs.com/BlueFire-py/p/10957663.html

Linux显示中文乱码解决方法

http://sumit.blog.51cto.com/162317/206698经常使用linux终端&#xff0c;有人上传中文命名的文件显示出中文乱码&#xff0c;下面是解决方法。默认显示的字符编码# echo $LANGen_US.UTF-8修改i18n文件# vi /etc/sysconfig/i18nLANG"zh_CN.GB18030"LANGUAGE"zh…

多行字符串的表示方式

原文载于&#xff1a;http://robinwu.iteye.com/blog/145514 其中最重要的、忽略一切转义字符、多行大包围、相当于的多行版本 1 str <<EOF 2 This isnt a tab: \t 3 and this isnt a newline: \n 4 EOF 5 6 puts str 转载于:https://www.cnblogs.com/kloboh…