题目链接

Problem Description
You have got a cylindrical cup. Its bottom diameter is 2 units and its height is 2 units as well.
The height of liquid level in the cup is d (0 ≤ d ≤ 2). When you incline the cup to the maximal angle such that the liquid inside has not been poured out, what is the area of the surface of the liquid? 
 
Input
The first line is the number of test cases. For each test case, a line contains a float-point number d.
 
Output
For each test case, output a line containing the area of the surface rounded to 5 decimal places.
 
Sample Input
4
0
1
2
0.424413182
 
Sample Output
0.00000
4.44288
3.14159
3.51241
 
 
题意:现在有一个圆柱形的水杯,底面直径为2,水杯高为2,现在水杯中装有高为d的水,求将水杯倾斜到最大角度(即水到杯口时,水不能流出)时,水面的面积?
 
思路:由高中学过的几何知识可以知道:水面相当于对于一个很长的圆柱体倾斜的用刀切开,那么这个切面就是一个完整的椭圆,当然如果不倾斜则得到特殊的椭圆——圆,如果水面经过杯底,那么水面就是一个缺少一部分的椭圆,所以我们需要分开讨论水面经过杯底和不经过杯底两种情况。
          那么这两种情况的d的临界值是多少呢? 可以发现对于水刚到杯底的时候,有水和无水的部分各占一半,所以分界点d=1;
 
1、水面不经过杯底(d>=1)
         
     这种情况如上图所示,h+(2-h)/2=d, 所以h=2*d-2,那么可以求出水面这个完整椭圆的长半径a=sqrt(2*2+(2-h)*(2-h))/2,而椭圆的短半经是b=1,所以水面面积为S=PI*a*b.
 
2、水面经过杯底(d<1)
 
      
         上图即是水面经过杯底的样子(我画的不是水杯倾斜,直接让水倾斜了,凑合看吧)。
         
         对于上图中mid越大则水的体积越大,那么我们可以根据体积二分mid求出mid真实长,最后根据真实的mid求出水面的面积,可以知道二分范围为(0,2)。每次我们需要根据当前mid求出水的体积,因为水体不规则所以必须积分求水的体积。
 
         积分:我们根据水的高度积分,如上图所示利用 y 积分求体积,那么我们需要根据 y 求出每个水体截面的长 t (类似于杯底的mid),求相似三角形 t/mid=(2-y)/2 得 t=(2-y)*mid/2 ;   然后根据水截面长 t 求出当前水体截面的面积 S;
 
         可以知道水体截面为一个扇形减去一个三角形组成,面积及体积如下图所示:
 
       

求出真实的mid以后,那么就可以求出水面的面积了。

如上图所示利用二分求出的mid得 len=sqrt(2*2+mid*mid),设水面与杯底的一个交点为(x,h),h=sqrt(1-(1-mid)*(1-mid)) (由杯底水面交线所在圆很容易求出 h ),那么len=a-x  且x^2/a^a+h^2/b^2=1 ,解上面两个方程 求得a= a=len/(1+flag*sqrt(1-h*h));

hdu 5954 -- Do not pour out(积分+二分)的更多相关文章

  1. HDU 5954 - Do not pour out - [积分+二分][2016ACM/ICPC亚洲区沈阳站 Problem G]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5954 Problem DescriptionYou have got a cylindrical cu ...

  2. HDU 5954 Do Not Pour Out

    #include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;++i) #defi ...

  3. HDU 2254 奥运(矩阵高速幂+二分等比序列求和)

    HDU 2254 奥运(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 2254 奥运 题意:  中问题不解释. 分析:  依据floyd的算法,矩阵的k次方表示这个矩阵走了k步.  所以k ...

  4. Do not pour out HDU - 5954 数学积分

    题目:题目链接 思路:纯高等数学问题,不过不是很好积分,具体积分思路及过程参考大佬博客——https://blog.csdn.net/danliwoo/article/details/53002695 ...

  5. HDU 2236:无题II(二分搜索+二分匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=2236 题意:中文题意. 思路:先找出最大和最小值,然后二分差值,对于每一个差值从下界开始枚举判断能不能二分匹配. ...

  6. HDU 4282 A very hard mathematic problem 二分

    A very hard mathematic problem Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/sh ...

  7. hdu 1839 Delay Constrained Maximum Capacity Path 二分/最短路

    Delay Constrained Maximum Capacity Path Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu. ...

  8. HDU 2141 Can you find it? (二分)

    题目链接: Can you find it? Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/10000 K (Java/ ...

  9. HDU 2389 Rain on your Parade(二分匹配,Hopcroft-Carp算法)

    Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 655350/165535 K (Java/Ot ...

随机推荐

  1. 帆软的报表系统与泛微OA结合起来,这两个软件麦枫提供了经典的服务。

    一.集成配景泛微OA对企业的代价 泛微协同办公计划能向你供给一个协同的.集成的办公情况,使所有的办公职员都在统一且个性化的信息流派中一路事情, 解脱光阴和地区的限定,实现协同事情与知识治理. Eoco ...

  2. matlab-常用函数(4)

    find()函数的用法 搜索矩阵中指定数值的下标,若指定值有多个,则返回多个下标: x = 1:2:20 x = 1 3 5 7 9 11 13 15 17 19 k = find(x==13) k ...

  3. spring 整合Mybatis 《报错集合,总结更新》

    错误:java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldExcepti ...

  4. Ajax异步请求模板

    $.ajax({ url: '', type: 'post', data: {'id':id}, dataType: 'json', success: function(data,statusText ...

  5. python 斐波那契数列 fibonacci

    在python中生成fibonacci数列的函数 def fibonacci(): list = [] while 1: if(len(list) < 2): list.append(1) el ...

  6. IS-IS完整笔记

    IS-IS笔记大全 1.公开,ISO国际标准化组织(按照中文顺序翻译) 中间系统到中间系统 双栈.集成 数据传递机制 Cons面向连接网络服务(TCP) Clns缺少链接网络服务(UDP) Is-is ...

  7. mysql中int(10)与int(11)有什么区别吗?

    先来看下面的图片 声明字段是int类型的那一刻起,int就是占四个字节,一个字节8位,也就是4*8=32,可以表示的数字个数是2的32次方(2^32 = 4 294 967 296个数字). 4 29 ...

  8. 201521123013 《Java程序设计》第7周学习总结

    1. 本章学习总结 2. 书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 public boolean contains(Object o) { r ...

  9. 201521123035《Java程序设计》第四周学习总结

    本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 本周还讲了注释与类设计.老师用例子向我们展示实际生活中一个类里面包含了哪些属性,并由此联想到如果自 ...

  10. 201521123037 《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 1.1 建立数据库,将自己的姓名.学号作为一条记录插入.(截图, ...