青少年编程知识记录 codecoming

【题解】东哥的杯子

【题目描述】

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

圆台形状,它的上底为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;  }



(adsbygoogle = window.adsbygoogle || []).push({});

标签: 二分

作者:亿万年的星光 分类:题解目录 浏览: