泡水的铅筒

文章描述了一个数学问题,涉及到一个长方体水池和一个圆锥形铅筒。问题要求计算在铅筒完全浸入水池并没过液面后,原有液体深度的最小值(H1)和最大值(H2)。输入包括水池尺寸和铅筒参数,输出需保留两位小数。提供的代码试图通过计算体积和面积比例求解,但存在一个测试点超时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

「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} h1h2

小 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 15
2 2 2 1 0 3 10^{3} 103 1 0 4 10^{4} 104 25 25 25 6 ∼ 10 6 \sim 10 610
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 1115
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 1620

对于 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} 1T,a,b,r,h1,h25×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} h1h2
题解:
这类是一道简单的数学题,直接按照数学思考的方法去写代码就行,但是我有一个测试点没有过去,超时了不知道是哪里的原因。
附上我的代码:

#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;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值