http://www.elijahqi.win/archives/1398
背景
在Nescafe27和28中,讲述了一支探险队前往Nescafe之塔探险的故事……
当两位探险队员以最快的时间把礼物放到每个木箱里之后,精灵们变身为一缕缕金带似的光,簇簇光芒使探险队员们睁不开眼睛。待一切平静下来之后,探险队员来到了一座宫殿中,玉制的石椅上坐着两个人……
“你们就是……Nescafe之塔护法中的两位?”
“是的,我们就是神刀护法xlk和飞箭护法riatre……你们来这里做什么?”
“我们是前来拜访圣主和四位护法的……”
“如果你们想见圣主和其它两位护法,你们必须穿过前方的七色彩虹。请随我来吧……”
描述
探险队员们跟随两位护法来到了七色虹前。七色虹,就是平面直角坐标系中赤橙黄绿青蓝紫七个半圆,第i座(1<=i<=7)半圆形彩虹的圆心是(xi,0),半径是ri,半圆上所有点的纵坐标均为非负数。探险队员可以看做一条竖直的、长度等于身高的线段,线段的底端纵坐标为0,最高的一位探险队员的身高为h。

现在探险队员们要从(0,0)穿越七色虹到达(x0,0),穿越七色虹的过程中,探险队员的整个身体必须始终在至少一个半圆形彩虹的内部。由于彩虹的半径ri可能太小了,不足以满足这个条件,因此两位护法决定帮助他们把所有彩虹的半径都增大一个非负实数r。探险队员们想知道,r最小是多少呢?
输入格式
第一行两个实数h、x0,表示身高和目的地横坐标。
接下来七行每行两个实数xi、ri,表示七座半圆形彩虹的圆心和半径。
输出格式
输出最小的r,四舍五入保留2位小数。
测试样例1
输入
4.0 36.0
0.0 4.0
6.0 4.0
12.0 4.0
18.0 4.0
24.0 4.0
30.0 4.0
36.0 4.0
输出
1.00
备注
对于 100% 的数据,满足0<=xi,x0<=10000,0< h< 100。

因为随着答案的增加可以通过的圆圈越多 所以二分很有效

我首先先针对数据进行了去重

然后每次枚举增加的那个值我可以通过半径 还有高度求出 他经过这个半圆的长度 然后 我去看这个长度能否连续覆盖到我的x0就好了 注意sqrt可能为负数所以需要特判

#include<cstdio>
#include<cmath>
#include<algorithm>
#define rps 1e-4
using namespace std;
inline bool judge1(double l,double r){if (r-l>rps) return true;else return false;
}
struct node{double r,x;
}data[10];
struct node1{double l,r;
}line[10];
inline bool cmp1(node1 a,node1 b){return a.l==b.l?a.r<b.r:a.l<b.l;}
double h,x0,x[10],r[10],r1[10];int n;
inline bool judge(double mid){for (int i=1;i<=n;++i) r1[i]=r[i]+mid;for (int i=1;i<=n;++i) {if (r1[i]*r1[i]-h*h<0) return 0;line[i].l=x[i]-sqrt(r1[i]*r1[i]-h*h),line[i].r=x[i]+sqrt(r1[i]*r1[i]-h*h);}sort(line+1,line+n+1,cmp1);//for (int i=1;i<=n;++i) printf("%f %f\n",line[i].l,line[i].r);if (line[1].l>0) return 0;double rmax=line[1].r,lmax=line[1].l;for (int i=2;i<=n;++i){if (line[i].l>rmax) return 0;if (line[i].r<=rmax) continue;lmax=line[i].l;rmax=line[i].r;if (rmax>=x0) return 1;} if (rmax<x0) return 0;else return 1;
}
inline bool cmp(node a,node b){return a.x<b.x;}
int main(){//freopen("rainbow.in","r",stdin);scanf("%lf",&h);scanf("%lf",&x0);for (int i=1;i<=7;++i) scanf("%lf%lf",&x[i],&r[i]),data[i].x=x[i],data[i].r=r[i];//for (int i=1;i<=7;++i) printf("%f %f\n",x[i],r[i]);sort(data+1,data+8,cmp);for (int i=1;i<=7;++i) x[i]=data[i].x,r[i]=data[i].r;//for (int i=1;i<=7;++i) printf("%f %f\n",x[i],r[i]);double lmax=x[1]-r[1],rmax=x[1]+r[1];for (int i=2;i<=7;++i){if (x[i]-r[i]>=lmax&&x[i]+r[i]<=rmax) data[i].x=50000,data[i].r=0;else lmax=x[i]-r[i],rmax=x[i]+r[i];}sort(data+1,data+8,cmp);n=7;for (int i=1;i<=7;++i) if (data[i].r!=0) x[i]=data[i].x,r[i]=data[i].r;else n=i;//for (int i=1;i<=n;++i) printf("%f %f\n",x[i],r[i]);double l=0,r=10000;//judge(0);while (judge1(l,r)){double mid=(l+r)/2;if (judge(mid)) r=mid;else l=mid;}printf("%.2f",r);return 0;
}

tyvj 2053 [Nescafé29]穿越七色虹相关推荐

  1. TYVJ 2054 [Nescafé29]四叶草魔杖 最小生成树 状态压缩/背包DP

    $ \rightarrow $ 戳我进TYVJ原题 [Nescafé29]四叶草魔杖 题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目背 ...

  2. tyvj 2054 [Nescafé29]四叶草魔杖

    http://www.elijahqi.win/archives/1395 背景 陶醉在彩虹光芒笼罩的美景之中,探险队员们不知不觉已经穿过了七色虹,到达了目的地,面前出现了一座城堡和小溪田园,城堡前的 ...

  3. 七色的寒冷彩虹便冒了出来

    放学以后到了家的寒冷 今天的放学以后到了家的寒冷,但利大于弊,我现在已经换人了,一座座房屋,七色的寒冷彩虹便冒了出来,像一片片雪地,一堆堆白云,时隐时现,周末,有利也有弊. 面对水雾,看,我就高高兴兴 ...

  4. 棱镜为什么能把阳光分成七色呢?

    不同颜色的光的波长是不同的.什么是波长呢?可以用水波做例子来说明,水面激起的波浪总是一个紧接着一个的.波浪的最高点叫波峰,最低点叫波谷,两个紧挨着的波峰(或波谷)之间的距离就是一个波长.水中形成的波纹 ...

  5. 达威尔GK5巧克力办公静音键盘,七色背光RGB游戏家用有线键盘上线啦!

    Rewl/达威尔GK5静音背光游戏办公家用台式笔记本电脑RGB巧克力有线键盘 产品参数: 产品名称:铝合金剪刀脚设计巧克力键盘 品牌:B.FRIENDit/壁虎忍者 型号:GK5 按键开关:剪刀脚设计 ...

  6. 苹果cmsv10好看的七色中文二开视频免费模板

    模板名称:苹果cmsv10好看的七色中文二开视频免费模板 模板程序:苹果cmsv10 模板类型:自适应模板 空间支持:php5.6+mysql 模板颜色:七色 模板来源:来自网络收集 下载方式:免费下 ...

  7. 二开七色中文视频 图片 小说网站源码模板 苹果cms V10

    适用程序: 苹果cmsv 10 兼容性和面向场景: 1.Windows 平台: IIS/Apache + PHP(5.6 +) + MySQL(5.5 +) 2.Linux/Unix 平台: Apac ...

  8. 盖世英雄!脚踏七色云彩,来讲解 Java 线程安全

    码个蛋(codeegg)第 764 次推文 作者: 七彩祥云至尊宝 原文: https://juejin.im/post/5d2c97bff265da1bc552954b 什么是线程 按操作系统中的描 ...

  9. 5.65寸7色墨水屏NFC方案 NFC彩色墨水屏方案 5.65寸7色桌牌方案 彩色墨水屏NFC无源方案 5.65寸七色无源NFC相框 5.65寸7色相框

    电子纸,也叫数码纸.它是一种超薄.超轻的显示屏,即理解为"和纸一样薄.柔软.可擦写的显示器",电子纸可看作是一个薄薄的嵌式显示屏. 电子纸的特征有: 1.内容的重写.可以任意对文字 ...

最新文章

  1. 服务器上找不到iis,解决IIS服务器部署 字体图标找不到的原因
  2. 人工智能的学习,需要学习哪些算法和数学知识呢?需要什么学历?
  3. UIAlertView' is deprecated: first deprecated in iOS 9.0 - UIAlertView is deprecated. Use UIAlert
  4. Java 比较两个版本号的大小 (通用)
  5. android applybatch,android – 使用applyBatch插入成千上万的联系人条目很慢
  6. react hooks_为什么选择React Hooks,我们如何到达这里?
  7. 使用networkx来生成网络科学里面三种常见的网络
  8. 基于多线程的Linux聊天室系统设计(C语言实现)
  9. 基于RV1126平台imx291分析 --- 写在开始
  10. Oracle-----Plsql导出表结构和表数据,数据库对象
  11. 2021年最新Java学习路线图指南
  12. Redis 配置文件重要属性介绍
  13. 网格计算, 云计算, 集群计算, 分布式计算, 超级计算
  14. 设计模式 装饰者模式 带你重回传奇世界
  15. 一年中所有节日的排列顺序_我国一年中的传统节日。(按顺序)
  16. 君莫笑系列视频学习(0)
  17. [转]全面比较Delphi和Visual C++
  18. 比较完整的A2C.c
  19. 2021年盐城高考成绩查询系统,2021年盐城工学院录取结果查询,附查询网址入口
  20. 旅游市场回暖,同程艺龙借机“上位”?

热门文章

  1. 学完计算机专业英语感受,计算机专业英语感想
  2. 【AR】AR 的几种底层实现方式
  3. PC端js禁止浏览器缩放
  4. 微信支付v3版本npm包
  5. java的excel模板下载(解决中文名乱码问题)
  6. html5星空效果图,HTML5 canvas炫酷星空背景特效
  7. 基于SSM的医院预约挂号系统 JAVA MYSQL
  8. 数仓(六)从0到1简单搭建数仓ODS层(埋点日志 + 业务数据)
  9. AUTO CAD 2020许可证过期(许可证超时),亲测有效,已中招
  10. 1005:地球人口承载力估计(c++)