zoukankan      html  css  js  c++  java
  • 九度oj 1551 二分 + 精度

    当刀痕长度从0--2*R 区间时, 比例是递增函数, 故满足二分法的条件。即  r(h)  =r0 , 求h

    题目来源:

    http://ac.jobdu.com/problem.php?pid=1551

    题目1551:切蛋糕

    时间限制:1 秒

    内存限制:128 兆

    特殊判题:

    提交:257

    解决:84

    题目描述:

    有如下图半价为R的圆形蛋糕,被切一刀后(图中红色直线),分成两个部分(黄色和绿色),已知其比例为r,求刀痕长度(图中红色直线)。

    输入:

    输入包括多组测试数据,包括一个整数R(1<=R<=1000),和一个浮点数r(0<r<1),精确到第四位小数。

    输出:

    对于每组测试用例,输出一个浮点数,代表刀痕的长度,保留二位小数。

    样例输入:
    1000 0.5000
    500 0.6183
    样例输出:
    1928.53
    982.49

    代码如下:
    #include<iostream>
    #include<stdlib.h>
    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    #include<string>
    #include<queue>
    #include<algorithm>
    #define PI acos(-1.0)
    #define eps 1e-8
    using namespace std;
    double R;
    double area(double h)
    {
        double arc=asin(h*0.5/R);
        return R*R*arc- 0.5 *h*sqrt(R*R - 0.25*h*h);
    }
    double are(){return R*R*PI;}
    
    double judge(double h)
    {
        return area(h)/(are()-area(h));
    }
    double bin_search(double r)
    {
        double left ,right, mid;
        left=0,right=2*R;
        double S=are();
        while(right-left>eps)
        {
            mid=(left+right)*0.5;
            if(judge(mid) >r )
                right=mid;
            else left = mid;
        }
        return (left+right)*0.5;
    
    }
    int main()
    {
        double r;
        while(cin>>R>>r)
        {
            printf("%.2f
    ",bin_search(r));
        }
        return 0;
    }




     
  • 相关阅读:
    java返回json数据日期为一串数字字符串 js 转义
    ==和equals以及hashcode
    【线程分析】
    【dubbo&zookeeper】
    线程安全实现方案
    IOC原理
    java锁
    java特殊运算符
    HashMap原理和TreeMap原理
    volatile与synchronized
  • 原文地址:https://www.cnblogs.com/zn505119020/p/3592093.html
Copyright © 2011-2022 走看看