UVa 697 Jack and Jill
2026/7/18 4:48:47 网站建设 项目流程

题目描述

Jack\texttt{Jack}JackJill\texttt{Jill}Jill从山脚出发,要运送指定体积VVV的水到山脚。每次过程如下:

  1. 两人从山脚走到山顶(耗时UPUPUP秒)。
  2. Jill\texttt{Jill}Jill将水桶从井口放下,桶在重力作用下加速(加速度32.2 ft/s232.2 \textit{ ft/s}^232.2ft/s2),到达水面时立即装满。水桶容量为BBB立方英尺。
  3. Jill\texttt{Jill}JillPPP英寸/秒的速度将桶拉回井口。
  4. Jack\texttt{Jack}Jack将桶带下山脚(耗时DOWNDOWNDOWN秒),倒水(瞬时),再回到山顶(耗时UPUPUP秒),将空桶交给Jill\texttt{Jill}Jill

井是圆柱体,直径为DDD英寸,初始水面距井口LLL英寸。每次打水后,水面下降(桶的体积对应的水被取走)。求运送VVV立方英尺水所需的总时间。

输入格式

每行七个实数UPUPUPDDDLLLBBBPPPDOWNDOWNDOWNVVV,以一行小于111的实数结束。

输出格式

对于每个场景,输出场景编号和输入参数,最后输出所需时间(保留两位小数)。各组之间用空行分隔。

样例

输入

20.0 36.0 72.0 2.0 10.0 18.0 10.0 25.0 72.0 200.0 1.5 8.0 30.0 20.0 0.0

输出

Scenario 1: up hill 20.00 sec well diameter 36.00 in water level 72.00 in bucket volume 2.00 cu ft bucket ascent rate 10.00 in/sec down hill 18.00 sec required volume 10.00 cu ft TIME REQUIRED 232.59 sec Scenario 2: up hill 25.00 sec well diameter 72.00 in water level 200.00 in bucket volume 1.50 cu ft bucket ascent rate 8.00 in/sec down hill 30.00 sec required volume 20.00 cu ft TIME REQUIRED 1141.63 sec

题目分析

本题是物理模拟题。每次打水过程的时间包括:

  • 上山:UPUPUP秒。
  • 桶下落:自由落体,从井口到水面,距离为LLL英寸,加速度32.2 ft/s232.2 \textit{ ft/s}^232.2ft/s2(即386.4 in/s2386.4 \textit{ in/s}^2386.4in/s2)。下落时间tdrop=2L/a=L/193.2t_{\textit{drop}} = \sqrt{2L / a} = \sqrt{L / 193.2}tdrop=2L/a=L/193.2秒。
  • 桶上升:匀速上升LLL英寸,速度PPP英寸/秒,时间L/PL / PL/P秒。
  • 下山:DOWNDOWNDOWN秒。
  • 注意:每次打水后,水面下降,新的LLL增加ΔL\Delta LΔLΔL\Delta LΔL由桶的体积BBB(立方英尺)除以井的截面积(平方英寸)得到,需统一单位。

每次打水后,累计水量增加BBB,直至达到或超过VVV(注意浮点误差)。输出总时间。

解题思路

  1. 读取参数,统一单位(将BBBVVV转换为立方英寸,111立方英尺=123= 12^3=123立方英寸)。
  2. 计算每次打水后水面下降高度dropDownOfWell = 4 * B / (PI * D * D)(英寸)。
  3. 循环:
    • 时间累加UPUPUP
    • 下落时间sqrt(L / 193.2)
    • 上升时间L / P
    • 更新LLL增加dropDownOfWell
    • 时间累加DOWNDOWNDOWN
    • 累计水量增加BBB
    • 当累计水量≥V\ge VV时停止。
  4. 输出结果。

复杂度分析

  • 循环次数约为V/BV / BV/B,可能较大,但VVVBBB为正实数,次数有限,可接受。

代码实现

// Jack and Jill// UVa ID: 697// Verdict: Accepted// Submission Date: 2018-02-27// UVa Run Time: 0.000s//// 版权所有(C)2018,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;constdoublePI=2.0*acos(0);intmain(){cin.tie(0),cout.tie(0),ios::sync_with_stdio(false);cout.setf(ios::fixed);cout.precision(2);doubleUP,D,L,B,P,DOWN,V;intcases=0;while(cin>>UP>>D>>L>>B>>P>>DOWN>>V){if(cases++>0)cout<<'\n';cout<<"Scenario "<<cases<<":\n";cout<<" up hill"<<setw(19)<<right<<UP<<" sec\n";cout<<" well diameter"<<setw(13)<<right<<D<<" in\n";cout<<" water level"<<setw(15)<<right<<L<<" in\n";cout<<" bucket volume"<<setw(13)<<right<<B<<" cu ft\n";cout<<" bucket ascent rate"<<setw(8)<<right<<P<<" in/sec\n";cout<<" down hill"<<setw(17)<<right<<DOWN<<" sec\n";cout<<" required volume"<<setw(11)<<right<<V<<" cu ft\n";doublefeetToInches=12.0;doublevolume=0,T=0,dropDownOfWell=pow(feetToInches,3.0)*4.0*B/(PI*D*D);V*=feetToInches,B*=feetToInches;while(volume+1e-6<V){T+=UP;T+=sqrt(L/193.2);T+=L/P;L+=dropDownOfWell;T+=DOWN;volume+=B;}cout<<" TIME REQUIRED"<<setw(13)<<right<<T<<" sec\n";}return0;}

总结

本题通过模拟每次打水过程,累加时间和水量,最终得到总时间。关键点包括:

  • 统一单位(英尺 ↔ 英寸)。
  • 正确计算自由落体时间和上升时间。
  • 每次打水后更新水面高度。
  • 注意浮点数比较时的精度控制。

该解法是物理模拟和单位换算的典型练习。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询