当前位置:首页 > 题解目录 > 正文内容

【题解】东哥的杯子

亿万年的星光3年前 (2022-03-26)题解目录7003

【题目描述】

话说在一场牛客练习赛中,东哥力压群雄,挣得第一,牛客为了奖励东哥的发挥,送他一个马克杯。奖励的马克杯是一个标准的

圆台形状,它的上底为R1,下底为R2,高为H, 东哥向杯子里倒V毫升的水,你知道倒完水后,杯子里的水位有多高吗?

【输入描述】

多组数据

每组数据只有一行,为R1(1<=R1<=10,000),R2(1<=R2<=100,000), H(1<=H<=100,000),V(1<=V<=1000,000,000)。

【输出描述】

输出倒完水后的杯子的水位高,结果保留三位小数

【样例输入】

10 100 10 1000
1 1 1 10

【样例输出】

1.250
1.000

【公式】

圆台体积公式


r为上底半径、R为下底半径、h为高。


【题目分析】



【参考答案】

#include<bits/stdc++.h>
using namespace std;
const double EPS=1e-9;
const double pi=acos(-1.0);//得到π的值
double r1,r2,h,v;
bool check (double x)
{
    double R=1.0*r1+(r2-r1)*x/h;
    return 1.0/3*pi*x*(r1*r1+R*R+r1*R)<v;
}
int main()
{
    while(cin>>r1>>r2>>h>>v)
    {
        double V=1.0/3*pi*h*(r1*r1+r2*r2+r1*r2);
        if(v>=V)
        {
            printf("%.3lf\n",h);
            continue;
        }
        double l=0,r=100*1.0,mid;
        while(r-l>EPS)
        {
            mid=(l+r)/2.0;
            if(check(mid))
                l=mid+EPS;
            else r=mid-EPS;
        }
        printf("%.3lf\n",(l+r)/2.0);
    }
    return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

标签: 二分
分享给朋友:

相关文章

【题解】大整数减法

【题目描述】求两个大的正整数相减的差。【输入】共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。【输出】一行,即所求的差。【输入样例】9999...

【题解】感应门

【题目描述】感应门会在有人经过的时候自动打开,冷却d 秒后自动关闭。如果有人在感应门打开的状态下通过,那么冷却时间会重置,重新冷却d秒后再关闭。在一段时间内,有 n个人陆续通过了感应门,他们...

【题解】最多次数

【题目描述】小蓝有一个字符串 s,他特别喜欢由以下三个字符组成的单词:l,q,b,任意顺序都可以,一共有 6 种可能:lqb、lbq、qlb、qbl、blq、bql。现在...

【题解】开花

【题解】开花

【题目描述】小A所在的学校又迎来了一年一度的开花活动,有 n 名学生被评为文学优秀奖,m 名学生被评为体育优秀奖。现已知两个奖项获奖同学的编号,每个同学都有唯一的编号。只有同时被评为文学优秀奖和体育优...

【题解】特殊的质数肋骨

【题目描述】农民约翰母牛总是产生最好的肋骨。你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组...

【题解】大数取模

【题目描述】求m%n。【输入描述】两个数,m和n。【输出描述】m模n的值。【样例输入】3【样例输出】2【数据范围】对于30%的数据, 1<m<10^18对于70%的数据, m>10^...