「ULSG-1」泡水的铅筒
题目描述
小 A 发现了一个盛有液体的长方体水池和一个圆锥形的铅筒。
由于水池中的液体有毒,小 A 无法量出液体的深度。于是小 A 在外面量出了长方体水池的长 a a a 宽 b b b 和高 h 1 h_{1} h1,圆锥形铅筒的底面半径 r r r 和高度 h 2 h_{2} h2,保证 min ( a , b ) ≥ 2 × r \min \left( a,b \right) \geq 2 \times r min(a,b)≥2×r, h 1 ≥ h 2 h_{1} \geq h_{2} h1≥h2。
小 A 将铅筒底面朝下正放入水池中,发现铅筒被完全浸没且没有液体溢出水池外,现在她想知道放入铅筒前液体的深度的最小值 H 1 H_{1} H1 和最大值 H 2 H_{2} H2,但几何一塌糊涂的她并不会计算,请你帮她解决这个问题。
输入格式
本题有多组数据。
第一行一个整数 T T T,表示数据组数。
对于每组测试数据:
输入一行共五个整数 a , b , h 1 , r , h 2 a,b,h_{1},r,h_{2} a,b,h1,r,h2。
输出格式
对于每组测试数据:
输出一行两个实数 H 1 H_{1} H1 和 H 2 H_{2} H2,用空格分隔,保留两位小数。
样例 #1
样例输入 #1
7
47 81 44 7 13
53 45 62 33 9
58 42 48 25 16
32 63 53 14 6
50 30 73 17 46
51 45 50 7 31
85 95 60 36 7
样例输出 #1
12.82 43.82
4.70 57.70
11.70 43.70
5.39 52.39
36.72 63.72
30.31 49.31
5.82 58.82
样例 #2
样例输入 #2
见附件中的 water/water2.in
样例输出 #2
见附件中的 water/water2.ans
样例 #3
样例输入 #3
见附件中的 water/water3.in
样例输出 #3
见附件中的 water/water3.ans
样例 #4
样例输入 #4
见附件中的 water/water4.in
样例输出 #4
见附件中的 water/water4.ans
提示
提示
圆锥体体积公式:
V = 1 3 π r 2 h V = \frac{1}{3} \pi r^{2}h V=31πr2h
其中 r r r 为底面半径, h h h 为圆锥的高,本题中 π \pi π 取 3.14 3.14 3.14,且忽略水池的厚度。
数据范围
本题采用捆绑测试。
子任务编号 | T ≤ T \leq T≤ | a , b , r , h 1 , h 2 ≤ a,b,r,h_{1},h_{2} \leq a,b,r,h1,h2≤ | 分数 | 测试点编号 |
---|---|---|---|---|
1 1 1 | 10 10 10 | 100 100 100 | 15 15 15 | 1 ∼ 5 1 \sim 5 1∼5 |
2 2 2 | 1 0 3 10^{3} 103 | 1 0 4 10^{4} 104 | 25 25 25 | 6 ∼ 10 6 \sim 10 6∼10 |
3 3 3 | 2 × 1 0 4 2 \times 10^{4} 2×104 | 1 0 5 10^{5} 105 | 25 25 25 | 11 ∼ 15 11 \sim 15 11∼15 |
4 4 4 | 5 × 1 0 5 5 \times 10^{5} 5×105 | 5 × 1 0 5 5 \times 10^{5} 5×105 | 35 35 35 | 16 ∼ 20 16 \sim 20 16∼20 |
对于
100
%
100 \%
100% 的数据,
1
≤
T
,
a
,
b
,
r
,
h
1
,
h
2
≤
5
×
1
0
5
1 \leq T,a,b,r,h_{1},h_{2} \leq 5 \times 10^{5}
1≤T,a,b,r,h1,h2≤5×105。保证
min
(
a
,
b
)
≥
2
×
r
\min \left( a,b\right) \geq 2 \times r
min(a,b)≥2×r,
h
1
≥
h
2
h_{1} \geq h_{2}
h1≥h2。
题解:
这类是一道简单的数学题,直接按照数学思考的方法去写代码就行,但是我有一个测试点没有过去,超时了不知道是哪里的原因。
附上我的代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const double pi=3.14;
void solve(){
ll a,b,h1,r,h2;
cin>>a>>b>>h1>>r>>h2;
double V=1.0/3.0*pi*r*r*h2;
// cout<<V<<endl;
ll S=a*b;
double H1=h1*1.0-V/S*1.0;
//cout<<H1<<endl;
double H2=h2*1.0-V/S*1.0;
// cout<<H2<<endl;
printf("%.2f %.2f\n",H2,H1);
}
int main(){
ll t;
t=1;
cin>>t;
while(t--){
solve();
// return 0;
}
return 0;
}