CF1059D Nature Reserve(二分)
简洁翻译:
有N个点,求与y=0相切的,包含这N个点的最小圆的半径
题解
二分半径右端点开小了结果交了二十几次都没A……mmp……
考虑一下,显然这个半径是可以二分的
再考虑一下,如果所有点都在y轴同一侧就有解,否则肯定无解
然后现在只要考虑在y轴同一侧时某一个半径是否能够包含所有点即可
因为得和y轴相切,所以半径确定时,圆心的y坐标是确定的
然后我们考虑对于每一个点,圆心的x坐标必须处在什么范围内
设这个点坐标为(x,y),圆半径为r,如果y>2*r显然不行
然后用勾股定理算一下两点之间的x坐标最多相差多少,那么就可以知道圆心的x坐标在什么范围内了
然后所有的范围并起来,如果是空集不可行,否则可行
然后注意判断x坐标相差多少时候的写法……代码里写了……
//minamoto
#include<bits/stdc++.h>
using namespace std;
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,:;}
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,:;}
const int N=2e5+;
int n,flag1=,flag2=;double l=,r=1e18,ans=,mx,x[N],y[N];
bool check(double mid){
double L=-1e18,R=1e18;
for(int i=;i<=n;++i){
if(*mid<y[i]) return false;
double len=sqrt(mid-(mid-y[i]))*sqrt(mid+(mid-y[i]));
//这里判断往左右能延伸多少时要这样写
//据说不这样写会导致严重的精度误差
//所以要先开方再相乘
L=max(L,x[i]-len),R=min(R,x[i]+len);
}
return L<R;
}
int main(){
cin>>n;
for(int i=;i<=n;++i){
cin>>x[i]>>y[i];
if(y[i]>) flag1=;
if(y[i]<) flag2=;
}
if(flag1&&flag2) return puts("-1"),;
if(flag2){
for(int i=;i<=n;++i) y[i]=-y[i];
}
int times=;
while(times--){
double mid=(l+r)/;
if(check(mid)) ans=mid,r=mid;
else l=mid;
}
printf("%.10lf\n",ans);
return ;
}
CF1059D Nature Reserve(二分)的更多相关文章
- CF1059D Nature Reserve
原题链接 网络不好的可以到洛谷上去QwQ 题目大意 有N个点,求与y=0相切的,包含这N个点的最小圆的半径 输入输出样例 输入: 2 0 1 1 1 输出 0.625 感觉最多是蓝题难度? 首先无解的 ...
- cf1059D. Nature Reserve(三分)
题意 题目链接 Sol 欲哭无泪啊qwq....昨晚一定是智息了qwq 说一个和标算不一样做法吧.. 显然\(x\)轴是可以三分的,半径是可以二分的. 恭喜你获得了一个TLE的做法.. 然后第二维的二 ...
- Codeforces Round #514 (Div. 2):D. Nature Reserve(二分+数学)
D. Nature Reserve 题目链接:https://codeforces.com/contest/1059/problem/D 题意: 在二维坐标平面上给出n个数的点,现在要求一个圆,能够容 ...
- E - Nature Reserve CodeForces - 1059D
传送门 There is a forest that we model as a plane and live nn rare animals. Animal number iihas its lai ...
- Nature Reserve
Nature Reserve time limit per test:2 seconds memory limit per test:256 megabytes input:standard inpu ...
- [CodeForces]1059D Nature Reserve
大意:给你一个平面上N(N<=100000)个点,问相切于x轴的圆,将所有的点都覆盖的最小半径是多少. 计算几何???Div2的D题就考计算几何???某人昨天上课才和我们说这种计算几何题看见就溜 ...
- D - Nature Reserve(cf514,div2)
题意:给出n(n<=1e5)个点,求一个最小的圆,与x轴相切,并且包含这n个点 思路:我第一想到的是,这个圆一定会经过一个点,再根据与x轴相切,我们可以找到最小的圆,让它包含其余的点,但是如何判 ...
- Codeforces Round #514 (Div. 2) D. Nature Reserve
http://codeforces.com/contest/1059/problem/D 最大值: 最左下方和最右下方分别有一个点 r^2 - (r-1)^2 = (10^7)^2 maxr<0 ...
- [ CodeForces 1059 D ] Nature Reserve
\(\\\) \(Description\) 你现在有\(N\)个分布在二维平面上的整点\((x_i,y_i)\),现在需要你找到一个圆,满足: 能够覆盖所有的给出点 与\(x\)轴相切 现在需要你确 ...
随机推荐
- 基本SCTP套接字编程常用函数
sctp_bindx函数:允许SCTP套接字捆绑一个特定地址子集 #include <netinet/sctp.h> // 若成功返回0,出错返回-1 int sctp_bindx(int ...
- Appium基于安卓的各种FindElement的控件定位
转自:http://www.2cto.com/kf/201410/340345.html 1. findElementByName 1.1 示例 ? 1 2 el = driver.findEleme ...
- 三种方法打印 main函数的返回地址的值(old EIP)(用途,你懂得!)
这里能够简单的改动随意函数的返回地址.能够做到自己定义EIP的指向,就可以运行当前进程空间的随意指令,这里仅仅是让大家更清楚栈帧结构,没有涉及跨进程的inline HOOK 等,后面会陆续讲下读取随意 ...
- MUI-折叠面板效果accordion
在做开发的过程中我们经经常使用到折叠面板. 那我们来看下折叠面板到底是怎么使用. 废话不多说. 代码粘下来: <!DOCTYPE html> <html> <head&g ...
- 使用双引擎,让kbmmw 的客户端访问更方便(既给浏览器做服务,也给桌面程序做服务)
前面我们一直都讲了如何使用kbmmw smarthttpservice 给客户端提供REST 服务.主要都是返回给 浏览器访问的,如果我们使用delphi 开发桌面应用,如何使用这些服务呢?其实一切 ...
- 20170225-第三件事:FR0002测试
第三件事:FR0002测试 MATNR WERKS BERID 800000217 I010 问题,上for all entrys… 1 ...
- mysql---列的选取原则
列选择原则: :字段类型优先级 整型 > date,整型>浮点型,time > enum,char>varchar > blob 列的特点分析: 整型: 定长,没有国家/ ...
- ubuntu12.04配置NFS服务详解
1:安装nfs sudo apt-get install nfs-kernel-server 2:配置服务 sudo vim /etc/exports 在末尾添加 /home/jyg *(rw,syn ...
- linux内存操作--ioremap和mmap
最近在做视频输出相关的东西,对于预留给framebuffer的内存使用不是很清楚,现在找到一些资料整理一下,以备使用.if (想看使用方法) goto 使用方法: 对于一个系统来讲,会有很多的外 ...
- HDU3567 Eight II —— IDA*算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3567 Eight II Time Limit: 4000/2000 MS (Java/Others) ...