CodeForces - 1059D(二分+误差)
链接: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(二分+误差)相关推荐
- Match Points CodeForces 1156C 二分答案
CodeForces 1156C Match Points 传送门:https://codeforces.com/problemset/problem/1156/C You are given a s ...
- Codeforces 650B 二分
题目:http://codeforces.com/problemset/problem/650/B 题意: :给n张图片循环可看,每张图片的朝向为横(w)|竖(v),但是手机是竖直放置的.开始时打开的 ...
- CodeForces - 786C——二分+模拟?
[题目描述] Rick and Morty want to find MR. PBH and they can't do it alone. So they need of Mr. Meeseeks. ...
- Frodo and pillows CodeForces - 760B 二分 注意l和r的选择
以后写l和r的初始值的时候,在不影响合理性的前提下,尽量写大一点 比如下面这个代码,如果r不加以或者l==0就不行 #include <iostream> #include <cst ...
- SCAU-春季训练-不应该啊(怎么这么菜。。。)
2021/3/14 春季训练2(难度div2d) 反思:(赛前,看什么crt,赛时满脑子都是线性方程组,....................................) 最近表现都不太好.. ...
- javascript字典中添加数组_Javascript 数组与字典
Javascript 的数组Array,既是一个数组,也是一个字典(Dictionary). 先举例看看数组的用法. var a = new Array(); a[0] = "Acer&qu ...
- 22.10.27补卡 CF-279B
Problem - 279B - Codeforces 用二分前缀和写的 首先前缀和处理数组, 然后从1开始枚举1以后的前缀和是否满足小于等于m, 每次循环更新ans的值, 最后输出最大的答案 /* ...
- codeforces 808 E. Selling Souvenirs (dp+二分+思维)
题目链接:http://codeforces.com/contest/808/problem/E 题意:最多有100000个物品最大能放下300000的背包,每个物品都有权值和重量,为能够带的最大权值 ...
- Codeforces Round #281 (Div. 2) C. Vasya and Basketball 二分
C. Vasya and Basketball 题目连接: http://codeforces.com/contest/493/problem/C Description Vasya follows ...
最新文章
- 详解SDR/DDR/DDR2/SDRAM的功能及异同
- composer安装laravel
- c语言调用oracle函数返回值吗,C语言通过值和引用函数
- HTML高亮标签<mark></mark>
- 苹果几最好用_深度解析安卓手机和苹果手机到底有哪些区别,哪种手机最好用...
- 40 CO配置-控制-产品成本控制-成本对象控制-实际成本核算/物料分类帐-维护材料分类帐文档的编号范围
- Bootstrap3栅格系统布局实例
- Sharepoint 弹出消息提示框
- 读《那些年,那些事 一个程序猿的奋斗史》 一点自己的感触
- 图像分辨率测试—imatest
- (二十二)【模电】(波形的发生与信号的转换)电压比较器
- 手持式频谱分析仪TFN RMT720A 频谱分析 基站分析 路测覆盖
- 何加盐深度揭秘:我是怎么找资料的?
- 转行做程序员,培训or自学?过来人亲身经历良心分享
- docker insecure-registry
- Catagory添加属性、扩展方法
- 嵌入式 linux 之 Lzma 移植
- VMware ESXi添加NVMe硬盘扩容
- pdf.js在h5端访问图片服务器地址携带token防盗链无法读取问题,兼容安卓ios在线预览
- linux系统的版本(转载)