链接:CodeForces - 1059D

题意:给出笛卡尔坐标系上 n 个点,求与 x 轴相切且覆盖了所有给出点的圆的最小半径。

题解:二分半径即可。判断:假设当前二分到的半径是 R ,因为要和 x 轴相切,所以圆心一定在 y = R 上,对于每一个点而言,圆要覆盖该点,那么圆心在 y = R 上一定有一段限定区间,所以只要判断这 n 个区间是否有公共区间即可。卡点:误差,太可恶了,求区间段时应该将 sqrt(R * R - d * d) 写成 sqrt(R - d) * sqrt(R + d) ,否则误差特别大。

#include <bits/stdc++.h>
using namespace std;const double EPS = 1e-6;
const double INF = 1e17;
const int mod = 1e9 + 7;
const int maxn = 1e5 + 10;
int n;
double x[maxn], y[maxn];bool judge(double R)
{double l = -INF, r = INF;for(int i = 0; i < n; i++){double d = fabs(y[i] - R);if(d > R) return false;//不可以写成sqrt(R * R - d * d),这样误差会加大double k = sqrt(R - d) * sqrt(R + d);double a = x[i] - k, b = x[i] + k;if(a > r || b < l) return false;l = max(l, a);r = min(r, b);}return true;
}bool OK()
{bool z = false, f = false;for(int i = 1; i < n; i++){if(y[i] > 0) z = true;else if(y[i] < 0) f = true;}return !(z && f);
}int main()
{scanf("%d", &n);for(int i = 0; i < n; i++) scanf("%lf%lf", &x[i], &y[i]);if(!OK())return puts("-1") & 0;for(int i = 0; i < n; i++) y[i] = fabs(y[i]);double l = 0, r = INF;for(int i = 0; i < 100; i++){double mid = (l + r) / 2.0;if(judge(mid)) r = mid;else l = mid;}printf("%.6f\n", r);return 0;
}

转载于:https://www.cnblogs.com/chenquanwei/p/9766049.html

CodeForces - 1059D(二分+误差)相关推荐

  1. Match Points CodeForces 1156C 二分答案

    CodeForces 1156C Match Points 传送门:https://codeforces.com/problemset/problem/1156/C You are given a s ...

  2. Codeforces 650B 二分

    题目:http://codeforces.com/problemset/problem/650/B 题意: :给n张图片循环可看,每张图片的朝向为横(w)|竖(v),但是手机是竖直放置的.开始时打开的 ...

  3. CodeForces - 786C——二分+模拟?

    [题目描述] Rick and Morty want to find MR. PBH and they can't do it alone. So they need of Mr. Meeseeks. ...

  4. Frodo and pillows CodeForces - 760B 二分 注意l和r的选择

    以后写l和r的初始值的时候,在不影响合理性的前提下,尽量写大一点 比如下面这个代码,如果r不加以或者l==0就不行 #include <iostream> #include <cst ...

  5. SCAU-春季训练-不应该啊(怎么这么菜。。。)

    2021/3/14 春季训练2(难度div2d) 反思:(赛前,看什么crt,赛时满脑子都是线性方程组,....................................) 最近表现都不太好.. ...

  6. javascript字典中添加数组_Javascript 数组与字典

    Javascript 的数组Array,既是一个数组,也是一个字典(Dictionary). 先举例看看数组的用法. var a = new Array(); a[0] = "Acer&qu ...

  7. 22.10.27补卡 CF-279B

    Problem - 279B - Codeforces 用二分前缀和写的 首先前缀和处理数组, 然后从1开始枚举1以后的前缀和是否满足小于等于m, 每次循环更新ans的值, 最后输出最大的答案 /* ...

  8. codeforces 808 E. Selling Souvenirs (dp+二分+思维)

    题目链接:http://codeforces.com/contest/808/problem/E 题意:最多有100000个物品最大能放下300000的背包,每个物品都有权值和重量,为能够带的最大权值 ...

  9. Codeforces Round #281 (Div. 2) C. Vasya and Basketball 二分

    C. Vasya and Basketball 题目连接: http://codeforces.com/contest/493/problem/C Description Vasya follows ...

最新文章

  1. 详解SDR/DDR/DDR2/SDRAM的功能及异同
  2. composer安装laravel
  3. c语言调用oracle函数返回值吗,C语言通过值和引用函数
  4. HTML高亮标签<mark></mark>
  5. 苹果几最好用_深度解析安卓手机和苹果手机到底有哪些区别,哪种手机最好用...
  6. 40 CO配置-控制-产品成本控制-成本对象控制-实际成本核算/物料分类帐-维护材料分类帐文档的编号范围
  7. Bootstrap3栅格系统布局实例
  8. Sharepoint 弹出消息提示框
  9. 读《那些年,那些事 一个程序猿的奋斗史》 一点自己的感触
  10. 图像分辨率测试—imatest
  11. (二十二)【模电】(波形的发生与信号的转换)电压比较器
  12. 手持式频谱分析仪TFN RMT720A 频谱分析 基站分析 路测覆盖
  13. 何加盐深度揭秘:我是怎么找资料的?
  14. 转行做程序员,培训or自学?过来人亲身经历良心分享
  15. docker insecure-registry
  16. Catagory添加属性、扩展方法
  17. 嵌入式 linux 之 Lzma 移植
  18. VMware ESXi添加NVMe硬盘扩容
  19. pdf.js在h5端访问图片服务器地址携带token防盗链无法读取问题,兼容安卓ios在线预览
  20. linux系统的版本(转载)

热门文章

  1. 嵌入式C语言基础(三)
  2. PC和服务器的IP地址信息DNS,PC和服务器的IP地址信息DNS
  3. hive中任意相邻时间段数据获取
  4. 网络视频监控与人脸识别
  5. vi和vim 的常用操作
  6. Java探索之旅(6)——对象和类
  7. SWFUpload V2.2.0 说明文档
  8. python并行for循环_Python并行执行for循环
  9. 用链表和数组实现HASH表,几种碰撞冲突解决方法
  10. 简单模拟实现简单的当登录延时的效果