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\)轴相切 现在需要你确 ...
随机推荐
- ubuntu如何修改root密码
安装完Ubuntu后忽然意识到没有设置root密码,不知道密码自然就无法进入根用户下.到网上搜了一下,原来是这麽回事.Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码.我们可 ...
- SVN系列之—-SVN版本回滚的办法
例:SVN版本为:TortoiseSVN 1.9.7 一.SVN简介 subversion(简称svn)是一种跨平台的集中式版本控制工具,支持linux和windows. 版本控制解决了:*代码管理混 ...
- C#面向对象 结构体和类的应用
- Cocoapods Undefined symbols for architecture armv7s\arm64
此类错误 "_OBJC_CLASS_$_AFURLSessionManager", referenced from: 解决的方法 在other linker flags里加入一行 ...
- iOS_40_核心动画
核心动画之CATransition转场动画 终于效果图: 核心动画之CAKeyFrameAnimation,图标抖动效果 终于效果图: 核心动画之CAAnimationGroup(动画组) 终于效果图 ...
- php 封装memcache类
<?php /* * memcache类 */ class Memcacheds{ //声明静态成员变量 private static $m = null; pri ...
- 关于MP4视频拖动的原理与分析(一)
本来想说说关于mp4和一些常见视频文件格式方面的历史. 如今想想没啥必要.毕竟本文是在讲关于mp4点播拖动方面的技术细节. 绪论,前言神马的显得有点多余. 说起MP4.不得不提"Digita ...
- spring中Bean创建
Spring中bean的加载过程: 1.获取配置文件资源 2.对获取的xml资源进行一定的处理检验 3.处理包装资源 4.解析处理包装过后的资源 5.加载提取bean并注册(添加到beanDefini ...
- alsa声卡切换
环境 ubuntu12.04 因为桌面版的默认装了,而且调声音也很方便,这里说一下server版下的配置,毕竟做开发经常还是用server版的 1.安装 apt-get install alsa-ba ...
- appium 控件定位
转自:http://www.2cto.com/kf/201410/340345.html AppiumDriver的各种findElement方法的尝试,尝试的目标应用是SDK自带的Notepad应用 ...