题目链接: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]的更多相关文章

  1. 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 ...

  2. HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  3. HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)

    Counting Cliques Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  4. HDU 5948 Thickest Burger 【模拟】 (2016ACM/ICPC亚洲区沈阳站)

    Thickest Burger Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  5. HDU 5949 Relative atomic mass 【模拟】 (2016ACM/ICPC亚洲区沈阳站)

    Relative atomic mass Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  6. hdu 5954 -- Do not pour out(积分+二分)

    题目链接 Problem Description You have got a cylindrical cup. Its bottom diameter is 2 units and its heig ...

  7. 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 ...

  8. HDU 5976 Detachment 【贪心】 (2016ACM/ICPC亚洲区大连站)

    Detachment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  9. HDU 5979 Convex【计算几何】 (2016ACM/ICPC亚洲区大连站)

    Convex Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

随机推荐

  1. sql server 多表关联更新 update

    update a set a.KSMC = b.name from JC_KSXXB a inner join chisdb_ymyy..zd_unit_code b on a.KSDM = b.co ...

  2. 配置yum软件仓库(redhat 7.0)

    第一步:切换到yum配置文件目录 执行:cd /etc/yum.repos.d/ 第二步:创建文件并进行编辑:vi rhel7.repo 写入如下内容:[rhel7] name=rhel7 ##名字随 ...

  3. Apache Spark 2.3.0 重要特性介绍

    文章标题 Introducing Apache Spark 2.3 Apache Spark 2.3 介绍 Now Available on Databricks Runtime 4.0 现在可以在D ...

  4. Socket网络编程--简单Web服务器(3)

    上一小节已经实现了浏览器发送请求,然后服务器给出应答信息,然后浏览器显示出服务器发送过来的网页.一切看起来都是那么的美好.这一小节就准备实现可以根据地址栏url的不同来返回指定的网页.目前还不考虑带参 ...

  5. [Big Data - Kafka] Kafka设计解析(三):Kafka High Availability (下)

    Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cloudera.Apache Storm.Spa ...

  6. Spring Security 认证流程

    请求之间共享SecurityContext原因:

  7. OSI网络体系结构

    为把在一个网络结构下开发的系统与在另一个网络结构下开发的系统互连起来,以实现更高一级的应用,使异种机之间的通信成为可能,便于网络结构标准化,国际标准化组织(ISO)于1983年形成了开放系统互连基本参 ...

  8. Java知多少(21)this关键字详解

    this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性.例如: public class Demo{ public int x = 10; publi ...

  9. No service of type Factory<LoggingManagerInternal> available in ProjectScopeService

    导入GitHub上下载的项目时报错 No service of type Factory<LoggingManagerInternal> available in ProjectScope ...

  10. tronado学习

    请求处理程序和请求参数: 原创首发:http://www.cnblogs.com/zxlovenet/p/4128644.html 程序将URL映射到tornado.web.RequestHandle ...