Problem D. Delay Time Input file: standard input Output file: standard output Time limit: 1 second Memory limit: 512 megabytes Petr and Egor are measuring the gravitational acceleration g on their physics lessons using a special device. An electromagnetic trap holding a metal ball is installed on an arbitrary positive height chosen by the user. As soon as the button is pressed, the timer starts, the electromagnet turns off and the released ball falls on a table. The timer stops immediately when the ball touches the table. h Petr has set the height to h1 meters and got t1 seconds on the timer as a result of the experiment. In his turn Egor changed the height to h2 meters and got t2 seconds shown on the timer. While calculating the value of g they surprisingly got significantly different results, and asked a teacher to clarify the nature of this inconsistency. As it often happens with this sort of “mystery”, the solution was simple: there was a constant delay of d seconds between the start of the timer and the moment the ball actually starts to fall, caused by the time needed for the electromagnet to lose its grip on the ball. They quickly managed to determine this value from the given information and calculate the correct g. Can you manage to do this in five hours? Assume that the gravitational acceleration and the delay time are the same in both experiments. Air friction and other effects are considered negligible for the purpose of this experiment. When the ball with zero initial speed starts to fall affected only by the gravitational acceleration g, the distance it travels in t seconds is given by a well-known formula: ρ(t) = g · t 2 2 Input The first line of the input contains real values h1 and t1 — the height selected by Petr, in meters, and the time value he has measured, in seconds (0 < h1, t1 ≤ 10). The second line contains real values h2 and t2 — the values of height in meters and time in seconds for Egor’s experiment (0 < h2, t2 ≤ 10, h1 ̸= h2). All values in the input are given with no more than three digits after the decimal point. Page 5 of 17 ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 It is guaranteed that input data is consistent, that means that positive real g and d were used to generate the input. Output Output the value of electromagnet delay d in seconds. Your answer will be considered correct if its absolute or relative error doesn’t exceed 10−4 . Formally, if your answer is a and the jury’s answer is b, the checker will accept your answer if |a−b| max(1,b) ≤ 10−4 . Examples standard input standard output 1.495 2.009 7.674 2.708 1.456709 5 1.25 1.25 0.75 0.250000 Note In the first sample the gravitational acceleration g is approximately equal to 9.80246, while in the second sample it is 10. Note that g in the testset can vary arbitrarily and is not guaranteed to be related to the gravitational acceleration on the surface of any known planet.
题意:给出球的两次坠落高度,开始下落时间和球坠地的时间分别是H1,T1,H2,T2,但是测量有误差,求误差大小。
分析:暴力枚举误差。
/**
Create By yzx - stupidboy
*/
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <ctime>
#include <iomanip>
using namespace std;
typedef long long LL;
typedef double DB;
#define MIT (2147483647)
#define INF (1000000001)
#define MLL (1000000000000000001LL)
#define sz(x) ((int) (x).size())
#define clr(x, y) memset(x, y, sizeof(x))
#define puf push_front
#define pub push_back
#define pof pop_front
#define pob pop_back
#define ft first
#define sd second
#define mk make_pair inline int Getint()
{
int Ret = ;
char Ch = ' ';
bool Flag = ;
while(!(Ch >= '' && Ch <= ''))
{
if(Ch == '-') Flag ^= ;
Ch = getchar();
}
while(Ch >= '' && Ch <= '')
{
Ret = Ret * + Ch - '';
Ch = getchar();
}
return Flag ? -Ret : Ret;
} const DB EPS = 1e-;
DB h1, h2, t1, t2; inline void Input()
{
cin >> h1 >> t1 >> h2 >> t2;
} inline DB Sqr(DB x)
{
return x * x;
} inline DB Work(DB x)
{
DB g1 = 2.0 * h1 / Sqr(t1 - x);
DB g2 = 2.0 * h2 / Sqr(t2 - x);
return abs(g1 - g2);
} inline void Solve()
{
DB ret = 0.0, cnt = 1.0 * INF;
for(DB delay = 0.0; delay <= min(t1, t2) - EPS; delay += EPS)
{
DB delta = Work(delay);
if(cnt > delta)
cnt = delta, ret = delay;
}
printf("%.6lf\n", ret);
} int main()
{
//freopen("D.in", "r", stdin);
Input();
Solve();
return ;
}