Codeforces Round #514 (Div. 2):D. Nature Reserve(二分+数学)
D. Nature Reserve
题目链接:https://codeforces.com/contest/1059/problem/D
题意:
在二维坐标平面上给出n个数的点,现在要求一个圆,能够容纳所有的点,并且与x轴相切的最小半径为多少。
题解:
容易知道圆的纵坐标的绝对值等于其半径,并且半径越大,容纳圆的可能性越大,那么就考虑二分其半径,这样y0值也确定了。
但x值不是很好求。这里我们找到y=y0的那一条线,然后根据半径以及y0,yi值,可以求出当x0在哪一段时,能够包含(xi,yi)这个点,这样我们把问题转化一下,就是求区间的交集了。
但是这题卡精度啊。。二分时换种写法,并且记得long double...具体见代码吧:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5+;
int n,m,x;
struct Point{
ll x,y;
bool operator < (const Point &A)const{
return x<A.x;
}
}p[N];
int check(long double mid){
m=;
long double l=-1e17,r=1e17;
for(int i=;i<=n;i++){
long double ll=fabs(p[i].y-mid);
if(mid*mid<ll*ll) return ;
long double dx = sqrt(mid*mid-ll*ll);
l=max(p[i].x-dx,l);
r=min(p[i].x+dx,r);
}
return l<=r;
}
int main(){
scanf("%d",&n);
int f=;
for(int i=;i<=n;i++){
scanf("%I64d%I64d",&p[i].x,&p[i].y);
if(p[i].y*p[].y<) f=;
}
sort(p+,p+n+);
if(f){
cout<<-;
return ;
}
for(int i=;i<=n;i++) p[i].y=fabs(p[i].y);
long double l=,r=1e16,mid;
for(int i=;i<=;i++){
mid=(l+r)/2.0;
if(check(mid)) r=mid;
else l=mid;
}
if(fabs(l-1e16)<) cout<<-;
else printf("%.15f",(double)l);
return ;
}
Codeforces Round #514 (Div. 2):D. Nature Reserve(二分+数学)的更多相关文章
- 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 Round #514 (Div. 2)
目录 Codeforces 1059 A.Cashier B.Forgery C.Sequence Transformation D.Nature Reserve(二分) E.Split the Tr ...
- Codeforces Round #368 (Div. 2) C. Pythagorean Triples(数学)
Pythagorean Triples 题目链接: http://codeforces.com/contest/707/problem/C Description Katya studies in a ...
- Codeforces Round #622 (Div. 2) B. Different Rules(数学)
Codeforces Round #622 (Div. 2) B. Different Rules 题意: 你在参加一个比赛,最终按两场分赛的排名之和排名,每场分赛中不存在名次并列,给出参赛人数 n ...
- Codeforces Round #284 (Div. 2)A B C 模拟 数学
A. Watching a movie time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces Round #514 (Div. 2) E. Split the Tree(倍增+贪心)
https://codeforces.com/contest/1059/problem/E 题意 给出一棵树,每个点都有一个权值,要求你找出最少条链,保证每个点都属于一条链,而且每条链不超过L个点 和 ...
- Codeforces Round #514 (Div. 2) C. Sequence Transformation(递归)
C. Sequence Transformation 题目链接:https://codeforces.com/contest/1059/problem/C 题意: 现在有1~n共n个数,然后执行下面操 ...
- Codeforces Round #514 (Div. 2) C. Sequence Transformation 思维构造
题意 给出一个1-n的集合 gcd 集合里面的所有数 得到的 一个 数 然后自己选择删去一个数 要使得到的数 构成的数列 的字典序最大 思路: gcd所有数 那gcd得到的数肯定要小于数 ...
- Codeforces Round #514 (Div. 2) B - Forgery
这个题我一开始没思路,最后也没思路 2个小时一直没思路 本来还想解释题意的,写了半天发现解释的不是很清楚,你还是google翻译一下吧 这个题解法是这样的: 首先,给你图案里面有很多的点,每个点的周围 ...
随机推荐
- 深入理解eos账户体系 active和action
在eos中,账户是一个非常重要的概念. 账户分为两部分组成 一种是active 一种是action. 智能合约本质上来讲就是一个action加上一个回馈脚本程序.任何智能合约都有这俩个部分组成. 那么 ...
- array.some() 方法兼容ie8
在第 5 版时,some 被添加进 ECMA-262 标准:这样导致某些实现环境可能不支持它.你可以把下面的代码插入到脚本的开头来解决此问题,从而允许在那些没有原生支持它的实现环境中使用它.该算法是 ...
- Python高级编程-使用SQLite
SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成. Python就 ...
- 文件操作---基于python
# coding:utf-8from time import sleepimport sysreload(sys)sys.setdefaultencoding("utf8")f=o ...
- java—连连看-实现封装
1.封装 Chess.java package Linkup; /** * 棋子封装类 * * @author laixl * */ public class Chess { // 图片的 状态 // ...
- Kprobe
linux内核源码Documentation目录下存在kprobe介绍文档如下 Kprobes allows multiple probes at the same address. Current ...
- SQL SERVER技术内幕之4 子查询
最外层查询的结果集会返回给调用者,称为外部查询.内部查询的结果是供外部查询使用的,也称为子查询.子查询可以分成独立子查询和相关子查询两类.独立子查询不依赖于它所属的外部查询,而相关子查询则须依赖它所属 ...
- 【问题解决】Project facet Java version 1.7 (或者1.8)is not supported.
在移植eclipse项目时,如果遇到 “Project facet Java version 1.7 is not supported.” 项目中的jdk1.7不支持.说明项目是其他版本jdk编译的, ...
- [计算机网络-应用层] P2P应用
首先我们要先来区分一下下面的几种体系结构: CS:Client/Server 客户-服务器结构BS:Browser/Server 浏览器-服务器结构 P2P:Peer to Peer 对等结构 BS ...
- 深入学习 Redis系列
深入学习 Redis(1):Redis 内存模型 深入学习 Redis(2):持久化 深入学习 Redis(3):主从复制 深入学习 Redis(4):哨兵