hdu 5060 五种情况求圆柱体与球体交
来源:互联网 发布:液晶电视机要网络还是 编辑:程序博客网 时间:2024/05/17 04:16
http://acm.hdu.edu.cn/showproblem.php?pid=5060
官方题解http://bestcoder.hdu.edu.cn/给复杂了
实际上用圆柱体与球体体积差的积分公式(pi*r*r - pi*x*x)即可轻松解决五种情况
#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <string>#include <queue>#include <set>#include <iostream>#include <algorithm>using namespace std;#define RD(x) scanf("%d",&x)#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)#define clr0(x) memset(x,0,sizeof(x))typedef long long LL;const double pi = acos ( -1.0 ) ;int R , HR , HZ ;double f2 ( double x1 , double x2 ) {return R * R * pi * ( x2 - x1 ) - 1.0 / 3.0 * pi * ( x2 * x2 * x2 - x1 * x1 * x1 ) ;}int solve () {double V1 = pi * R * R * R * 4.0 / 3.0 ;double V2 = 2.0 * HR * HR * pi * HZ ;if ( HR * HR + HZ * HZ <= R * R ) {printf ( "%.6f\n" , V2 / V1 ) ;} else if ( HR >= R && HZ >= R ) {printf ( "%.6f\n" , V1 / V2 ) ;} else { double V; if ( HR <= R && HZ <= R ) { double y1 = HZ ; double y2 = sqrt ( R * R - HR * HR ) ; V = 2.0 * ( HR * HR * y2 * pi + f2 ( y2 , R ) - f2 ( y1 , R ) ) ; } else if ( HR > R && HZ <= R ) { double y1 = HZ ; double y2 = 0 ; V = 2.0 * ( f2 ( y2 , R ) - f2 ( y1 , R ) ) ; } else if ( HR <= R && HZ >= R ) { double y = sqrt ( R * R - HR * HR ) ; V = 2.0 * ( HR * HR * y * pi + f2 ( y , R ) ) ; } printf ( "%.6f\n" , V / ( V1 + V2 - V ) ) ;}}int main () {while ( ~RD3(R , HR , HZ ) ) solve () ;return 0 ;}
0 0
- hdu 5060 五种情况求圆柱体与球体交
- 【HDU】5060 War 求圆柱和圆的体积交与体积并
- 求圆柱体的表面积与体积
- 线段与三角形求交
- 射线与平面求交
- 射线与三角形求交
- hdu 3642 求长方体的体积交
- hdu 1086 计算几何 线段求交
- HDU 1086 (平面几何 线段求交)
- OJ刷题二——求圆柱体的表面积与体积
- 求圆柱体的表面积
- 求圆柱体的表面积
- 求圆柱体的体积
- 求圆柱体的面积
- 圆柱体求表面积
- 求圆柱体表面积
- 求圆柱体的体积
- 求圆柱体表面积
- Node.js v0.10.31API手册-加密
- 解决界面使用轮播图,不停创建界面,导致adapter和adapter里的默认图创建不停的生成,导致内存溢出
- 【计算几何】 POJ 1127 Jack Straws 判断线段是否相交
- 堆排序
- ural 1707. Hypnotoad's Secret(线段树)
- hdu 5060 五种情况求圆柱体与球体交
- C# 组元Tuple
- UI线程与后台线程交互设计的5种方法
- Tomcat源码分析(二)------ 一次完整请求的里里外外
- hdu2084数塔
- 程序基础C语言常量(const)参数
- 超级课程表demo
- NYOJ 570欧拉函数求和(欧拉函数&&数论入门)
- BCD编码