Hdu--5060(数学)

2014-10-06 20:43:27

思路:给这题跪了。。推了好久- = 数学太渣。

  学到了一个重要的公式(其实自己推推也很快出来的):球冠公式:pi * h^2 * (3R - h) / 3,R为球的半径,h为球冠的高。

 1 /*************************************************************************
 2     > File Name: 1003.cpp
 3     > Author: Nature
 4     > Mail: 564374850@qq.com 
 5     > Created Time: Sun 05 Oct 2014 06:54:51 PM CST
 6 ************************************************************************/
 7 
 8 #include <cstdio>
 9 #include <cstring>
10 #include <cstdlib>
11 #include <cmath>
12 #include <vector>
13 #include <map>
14 #include <set>
15 #include <queue>
16 #include <iostream>
17 #include <algorithm>
18 using namespace std;
19 #define lp (p << 1)
20 #define rp (p << 1|1)
21 #define getmid(l,r) (l + (r - l) / 2)
22 #define MP(a,b) make_pair(a,b)
23 typedef long long ll;
24 const int INF = 1 << 30;
25 const double PI = acos(-1.0);
26 
27 double R,HR,HZ;
28 double v1,v2,vi,t,d,vsum;
29 
30 int main(){
31     while(scanf("%lf%lf%lf",&R,&HR,&HZ) != EOF){
32         v1 = 4.0 * PI * R * R * R / 3.0;
33         v2 = PI * HR * HR * 2.0 * HZ;
34         d = HR * HR + HZ * HZ;
35         vsum = v1 + v2;
36         if(HZ >= R && HR >= R){
37             printf("%.6f\n",v1 / v2);
38         }
39         else if(d <= R * R){
40             printf("%.6f\n",v2 / v1);
41         }
42         else if(HZ < R && HR > R){
43             vi = 2.0 * PI * R * R * HZ - 2.0 * PI * HZ * HZ * HZ / 3.0;
44             printf("%.6f\n",vi / (vsum - vi));
45         }
46         else if(HZ > R && HR < R){
47             t = sqrt(R * R - HR * HR);
48             vi = 4.0 * PI * (R * R * R - t * t * t) / 3.0;
49             printf("%.6f\n",vi / (vsum - vi));
50         }
51         else{
52             t = sqrt(R * R - HR * HR);
53             vi = 4.0 * PI * (R * R * R - t * t * t) / 3.0;
54             vi -= 2 * PI * (R - HZ) * (R - HZ) * (R - (R - HZ) / 3.0);
55             printf("%.6f\n",vi / (vsum - vi));
56         }
57     }
58     return 0;
59 }

 

转载于:https://www.cnblogs.com/naturepengchen/articles/4008670.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值