题意略。

这个题目最关键的是在于计算球冠的体积。令球冠体积为V。

我们可以用祖暅原理来计算V,

这里,可以看出,球冠的体积等于左图的上半个圆柱减去那个倒扣的圆台。

祖暅原理:界于两个平行平面之间的两个立体,被任一平行于这两个平面的平面所截,如果两个截面的面积相等,则这两个立体的体积相等。

V = Pi * r^2 * (r - y) - V(圆台)

本题分为五种情况来讨论:

1.球完全内含于圆柱。

2.球左右凸出圆柱,但是上下不突出。

3.球左右不凸出圆柱,但是上下突出圆柱。

4.球上下左右均凸出,但是尚未包含圆柱。

5.球包含圆柱。

#include<bits/stdc++.h>
#define Pi acos(-1.0)
using namespace std; double R,HR,HZ; int main(){
while(scanf("%lf%lf%lf",&R,&HR,&HZ) == ){
double part1,part2;
double v1 = Pi * R * R * R * 4.0 / 3.0;
double v2 = Pi * HR * HR * HZ * ;
if(R <= HR && R <= HZ){
part1 = v1;
part2 = v2;
}
else if(R <= HR && R > HZ){
double add = Pi * R * R * (R - HZ) - 1.0 / 3.0 * Pi * (R - HZ) * (HZ * HZ + R * R + HZ * R);
part1 = v1 - * add;
part2 = v2 + * add;
}
else if(R > HR && R <= HZ){
double d = sqrt(R * R - HR * HR);
double add = Pi * R * R * (R - d) - 1.0 / 3.0 * Pi * (R - d) * (d * d + R * R + d * R);
add = 2.0 / * Pi * R * R * R - add;
add *= ;
add -= Pi * HR * HR * * d;
part1 = v1 - add;
part2 = v2 + add;
}
else if(R > HR && R > HZ && R < sqrt(HR * HR + HZ * HZ)){
double add1 = Pi * R * R * (R - HZ) - 1.0 / 3.0 * Pi * (R - HZ) * (HZ * HZ + R * R + HZ * R);
double d = sqrt(R * R - HR * HR);
double add2 = Pi * R * R * (R - d) - 1.0 / 3.0 * Pi * (R - d) * (d * d + R * R + d * R);
add2 = 2.0 / 3.0 * Pi * R * R * R - add2;
add2 *= ;
add2 -= Pi * HR * HR * * d;
part1 = v1 - * add1 - add2;
part2 = v2 + * add1 + add2;
}
else if(R >= sqrt(HR * HR + HZ * HZ)){
part1 = v2;
part2 = v1;
}
printf("%lf\n",part1 / part2);
}
return ;
}

HDU 5060的更多相关文章

  1. hdu 5060 五种情况求圆柱体与球体交

    http://acm.hdu.edu.cn/showproblem.php?pid=5060 官方题解http://bestcoder.hdu.edu.cn/给复杂了 实际上用圆柱体与球体体积差的积分 ...

  2. hdu 5060 War

    War Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. [kmp+dp] hdu 4628 Pieces

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4622 Reincarnation Time Limit: 6000/3000 MS (Java/Ot ...

  4. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  6. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  7. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  8. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

  9. HDU 1796How many integers can you find(容斥原理)

    How many integers can you find Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d ...

随机推荐

  1. eclipse导入项目之后有感叹号

    说明项目的编译过程报错.导致原因:项目引入后,需要重新配置jar包路径. 1.右击你的项目-->Build Path-->Configure Build Path.... 2.在弹出的对话 ...

  2. Storm集群安装与部署

    准备 1.三台虚拟机 192.168.1.128 Nimbus 192.168.1.131 Supervisor 192.168.1.132 Supervisor 2.JDK1.8 3.Zookeep ...

  3. 易趣:使用MongoDB创建关键业务的多数据中心应用

    eBay:使用MongoDB创建关键业务的多数据中心应用 作为全球前十的零售品牌,eBay的活跃用户有一亿七千多万,并拥有跨越全世界190个市场的10亿购物清单,这样的规模下,eBay绝对不允许出现宕 ...

  4. Git多帐号配置,管理多个SSH

    查看自己所有的SSH-Key $ cd ~/.ssh $ ls id_rsa id_rsa.pub known_hosts 如果你已经创建过git账号那你可能和我一样会看到只有一个SSH-Key, 这 ...

  5. Java细节

    native关键字用法 native是与C++联合开发的时候用的!java自己开发不用的! 使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL, ...

  6. 使用FileReader实现前端预览所选图片

    需求描述 在浏览器环境下进开发网站(也就是B/S架构的应用),获取到当前设备上的图片后,希望可以在上传到服务器前简单预览一下图片内容. 具体实现 主要代码 html 部分 <input type ...

  7. JAVA动态代理机制解析

    1. 概述 首先,我们来思考如下两个问题: 什么是代理模式?为什么要使用代理模式? 简单总结一下,所谓的代理模式就是在原有的服务上多加一个占位,通过这个占位去控制服务的访问.通过代理模式,一方面可以控 ...

  8. 关于HTTP GET & POST的区别(转)

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE. URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTT ...

  9. 安装PHP的mongodb驱动速记

    安装环境:Centos 6.5   PHP 5.3.27 这里PHP已经安装,安装路径为: /usr/local/php/ 下载安装文件: http://pan.baidu.com/s/1pJ0Spi ...

  10. Linux普通用户使用sudo权限启停apache服务

    sudo的工作过程如下: 1,用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限 2,确认用户具有可执行sudo的权限后,让用户输入密码确认 3,若密码 ...