• -cogs1247. [Nescafé29] 穿越七色虹


    1247. [Nescafé29] 穿越七色虹

    ★   输入文件:rainbow.in   输出文件:rainbow.out   简单对比
    时间限制:5 s   内存限制:128 MB

    【背景】

    在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位小数。

    【样例输入】

    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。

    各个测试点0.5s

    【来源】

    http://www.tyvj.cn/Problem_Show.aspx?id=2053

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstdlib>
    using namespace std;
    #define eps 0.001
    double h,x0,pos[10],r[10],r_now[10];
    bool check(double x){
        for(int i=1;i<=7;i++)r_now[i]=r[i]+x;
        for(double p=0;p<=x0;p+=0.01){
            bool flag=0;
            for(int j=1;j<=7;j++){//枚举每一个彩虹 
                double y=r_now[j]*r_now[j]-(p-pos[j])*(p-pos[j]);
                if(y>h){flag=1;break;}
            }
            if(flag==0)return 0;
        }
        return 1;
    }
    int main(){
        //freopen("Cola.txt","r",stdin);
        freopen("rainbow.in","r",stdin);
        freopen("rainbow.out","w",stdout);
        scanf("%lf%lf",&h,&x0);h=h*h;
        for(int i=1;i<=7;i++)scanf("%lf%lf",&pos[i],&r[i]);
        double l=0,r=10000;
        while(fabs(l-r)>eps){
            double mid=(l+r)/2.0;
            if(check(mid))r=mid;
            else l=mid;
        }
        printf("%.2lf",l);
    }
    70分 二分答案
  • 相关阅读:
    写在我第一个虚幻程序之前
    C++学习笔记(十二):重载函数
    JavaScript兼容问题汇总[实时更新]
    Activity跳转时传递Bitmap对象的实现
    Http报头Accept与Content-Type的差别
    第0讲: 准备篇
    Android Design Support Library(二)用NavigationView实现抽屉菜单界面
    Android Design Support Library(一)用TabLayout实现类似网易选项卡动态滑动效果
    Android Support Library 23.2用法简析
    Android Design Support Library初探,NavigationView实践
  • 原文地址:https://www.cnblogs.com/thmyl/p/7402800.html
Copyright © 2020-2023  润新知