HDOJ 5144 y and shot simple physical, hdojnpy
Three-point angle ....
YY and shot
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission (s): 236 Accepted Submission (s): 87
Problem descriptionpth is going to have a PE test. one of the test subjects is throwing the shot. the height of Alb is H meters. he can throw the shot at the speed of v0 m/s and at the height of exactly H meters. he wonders if he throws the shot at the best angle, how far can he throw? (The acceleration of gravity, g, is $9.8 m/s ^ 2 $)
InputThe first line contains a integer $ T (T \ leq 10000) $, which indicates the number of test cases.
The next T lines, each contains 2 integers $ H (0 \ leq h \ leq 10000 m) $, which means the height of y, and $ v_0 (0 \ leq v_0 \ leq 10000 m/s) $, which means the initial velocity.
OutputFor each query, print a real number X that was rounded to 2 digits after decimal point in a separate line. X indicates the farthest distance he can throw.
Sample Input
20 11 2
Sample Output
0.100.99HintIf the height of NPY is 0,and he throws the shot at the 45° angle, he can throw farthest.
SourceBestCoder Round #22
/*************************************** * ******** Author: CKbossCreated Time:, Saturday, December 13, 2014 File Name: C. cpp *************************************** * ********/# include <iostream> # include <cstdio> # include <cstring> # include <algorithm> # include <string> # include <cstdlib> # include <vector> # include <queue> # include <set> # include <map> # include <cmath> using namespace std; const double eps = 1e-6; const double g = 9.8; double H, V; double Distan (double degree) {double vx = V * sin (degree ); double vy = V * cos (degree); double time = (vx + sqrt (vx * vx + 2 * g * H)/g; return time * vy ;} int main () {// freopen ("in.txt", "r", stdin); // freopen ("out.txt", "w", stdout); int T_T; scanf ("% d", & T_T); while (T_T --) {scanf ("% lf", & H, & V); double low = 0 ., high = 90 .; double mid1, mid2, ans = 0; while (fabs (high-low)> = eps) {mid1 = (low * 2 + high)/3 .; mid2 = (low + high * 2)/3 .; double len1 = Distan (mid1); double len2 = Distan (mid2); ans = max (ans, max (len1, len2); if (len2 + eps> len1) low = mid1; else high = mid2;} printf ("%. 2lf \ n ", ans);} return 0 ;}