HDU 5954 - Do not pour out - [积分+二分][2016ACM/ICPC亚洲区沈阳站 Problem G]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5954
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(0 \le d \le 2)$,
求当在水不倒出来的前提下杯子倾斜角度最大时,水面面积。
题解:
(参考https://blog.csdn.net/danliwoo/article/details/53002695)
当 $d=1$ 时,是临界情况。
当 $d>1$ 时,水面为一个椭圆,设 $\theta$ 为水面与杯底的夹角,则 $S = \pi R r = \pi \cdot \frac{1}{cos \theta} \cdot 1 = \frac{\pi}{cos \theta}$。
当 $d<1$ 时,水面为一个椭圆截取一部分:
若将水此时的形状,按平行于杯底的方向,分割成若干薄面,每个薄面的面积为 $S_0$,则水的体积为
$V = \int_{0}^{2}S_0dy$;
不难求得
$y_0 = x_0 tan \theta$
$1 + \cos \alpha = x_0$
$S_0 = \pi - \alpha + \sin \alpha \cos \alpha$
上三式,对于 $0 \le \alpha \le \pi$(即 $2 \ge x_0 \ge 0$)均成立。
则水的体积定积分可变为
$V = \int_{0}^{2}(\pi - \alpha + \sin \alpha \cos \alpha)d[(1 + \cos \alpha)\tan\theta]$
即
$\tan\theta \int_{\pi}^{\alpha_1}(\pi - \alpha + \sin \alpha \cos \alpha)(- \sin \alpha)d\alpha$
其中 $\alpha_1 = \arccos(\frac{2}{\tan\theta}-1)$。
对上式积分得
$V = \tan \theta [(\pi \cos \alpha) + (\sin \alpha - \alpha \cos \alpha) - \frac{1}{3} \sin^3 \alpha]_{\pi}^{\alpha_1}$
那么,我们可以二分 $\theta$,使得 $V$ 逼近 $\pi d$,从而确定 $\theta$,进而用 $S_{斜面} = \frac{S_{底面}}{cos \theta}$ 求得水面面积。
AC代码:
#include<bits/stdc++.h>
using namespace std;
const double pi=acos(-1.0);
const double eps=1e-;
inline bool equ(double x,double y){return fabs(x-y)<eps;}
inline double a_t(double t) {
double tmp=2.0/tan(t);
if(tmp>) tmp=2.0;
else if(tmp<) tmp=0.0;
return acos(tmp-1.0);
}
inline double I(double a) {
return pi*cos(a)+sin(a)-a*cos(a)-pow(sin(a),)/3.0;
}
inline double V(double t) {
if(equ(t,pi/2.0)) return ;
else return tan(t)*(I(a_t(t))-I(pi));
}
int main()
{
int T;
double d;
cin>>T;
while(T--)
{
cin>>d;
if(equ(d,))
{
printf("%.5f\n",);
continue;
}
if(d>)
{
printf("%.5f\n",pi/cos(atan(-d)));
continue;
} double l=pi/4.0, r=pi/2.0, t;
while(r-l>eps)
{
t=(l+r)/;
if(equ(V(t),pi*d)) break;
else if(V(t)>pi*d) l=t;
else r=t;
}
double a=a_t(t);
double S=pi-a+sin(a)*cos(a);
printf("%.5f\n",S/cos(t));
}
}
HDU 5954 - Do not pour out - [积分+二分][2016ACM/ICPC亚洲区沈阳站 Problem G]的更多相关文章
- HDU 5950 - Recursive sequence - [矩阵快速幂加速递推][2016ACM/ICPC亚洲区沈阳站 Problem C]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 Farmer John likes to play mathematics games with ...
- HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)
Recursive sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)
Counting Cliques Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- HDU 5948 Thickest Burger 【模拟】 (2016ACM/ICPC亚洲区沈阳站)
Thickest Burger Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- HDU 5949 Relative atomic mass 【模拟】 (2016ACM/ICPC亚洲区沈阳站)
Relative atomic mass Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- hdu 5954 -- Do not pour out(积分+二分)
题目链接 Problem Description You have got a cylindrical cup. Its bottom diameter is 2 units and its heig ...
- 2016ACM/ICPC亚洲区沈阳站H - Guessing the Dice Roll HDU - 5955 ac自动机+概率dp+高斯消元
http://acm.hdu.edu.cn/showproblem.php?pid=5955 题意:给你长度为l的n组数,每个数1-6,每次扔色子,问你每个串第一次被匹配的概率是多少 题解:先建成ac ...
- HDU 5976 Detachment 【贪心】 (2016ACM/ICPC亚洲区大连站)
Detachment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- HDU 5979 Convex【计算几何】 (2016ACM/ICPC亚洲区大连站)
Convex Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
随机推荐
- CART决策树(分类回归树)分析及应用建模
一.CART决策树模型概述(Classification And Regression Trees) 决策树是使用类似于一棵树的结构来表示类的划分,树的构建可以看成是变量(属性)选择的过程,内部节 ...
- hihocoder第238周:杨氏矩阵的个数
题目链接 问题描述 给定一个N行M列的矩阵,往里面填入$1-N\times M$个数字,使得这个矩阵每行.每列都满足递增.问:有多少种填法? 问题分析 这个问题很难,如果能够直接想到,那就是天才了. ...
- spring-mybatis代码生成插件,与实例展示
前段时间看了张开涛写的代码生成插件,感觉思路很好,通过连接库然后获取数据库表信息,然后用户在界面中勾选要映射的策略,映射的字段,然后可以自动生成业务代码. 基于开涛的思路,自己写了一个简易插件,去掉了 ...
- c 链表之 快慢指针 查找循环节点
参考:http://blog.csdn.net/wenqian1991/article/details/17452715 上面分析了 根据这张图 推倒出 数学公式. 刚接触 不能一下弄明白.下面结合上 ...
- Selenium Web 自动化 - 项目实战环境准备
Selenium Web 自动化 - 项目实战环境准备 2016-08-29 目录 1 部署TestNG 1.1 安装TestNG 1.2 添加TestNG类库2 部署Maven 2.1 mav ...
- ArcGIS Runtime SDK for iOS之符号和渲染
符号定义了图形外观的非地理方面.它包括了图形的颜色.线宽.透明度等等.ArcGIS Runtime SDK for iOS包含了许多符号类,其中的每个类可以让你以独特的方式指定符号.每个符号的类型也是 ...
- git push origin master和git push有什么区别?
1.master是主分支,还可以建一些其他的分支用于开发.2.git push origin master的意思就是上传本地当前分支代码到master分支.git push是上传本地所有分支代码到远程 ...
- JVM:基础
参考 温绍景-Java虚拟机基础
- [备份]EntityFramework
本视频和分步演练介绍通过 Code First 开发建立新数据库.这个方案包括建立不存在的数据库(Code First 创建)或者空数据库(Code First 向它添加新表).借助 Code Fir ...
- 安卓程序代写 网上程序代写[原]Android中的回调Callback
回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 1. 如何定义一个回调 a. 定义接口 : 在 ...