1. 程式人生 > >牛客練習賽28 E【斜拋運動的最大水平射程】

牛客練習賽28 E【斜拋運動的最大水平射程】

連結:https://www.nowcoder.com/acm/contest/200/E
來源:牛客網

題目描述

女裝會成癮

由於某人的精心設計,小可愛掉入了女裝的天坑無法自拔。

於是……她開始瘋狂的成批的買女裝。

而Kirito_Rivaille為了戒掉他的女裝病,準備實施家暴——把小可愛的女裝從窗戶扔下去

他們家距離地面的高度為H,也就是說,女裝都是從這了被丟擲去的。

而由於Kirito_Rivaille體力有限,(女裝也很沉),所以她丟擲去的速度最大是v(最小是0);

之後呢,Kirito_Rivaille為了不讓小可愛在下去撿到,於是想盡可能的拋的遠一點。

所以現在他想找個合適的角度丟擲。

作為Kirito_Rivaille身邊的活寶,你的任務是幫助Kirito_Rivaille。

給出他們倆住的屋子的高度H和丟擲速度v,請你找到一個合適的角度θ使得落地時距他們腳下的地面(H=0的位置)的直線距離最遠。

然而小可愛並不關心這個角度是多少,只關心距離他們的直線距離是多少。

輸出四捨五入保留五位小數,當你的答案與std的相對誤差不超過0.00001時就算正確了。

 

說明:不考慮空氣阻力,g取9.80665。

提示公式:

    x=vtcosθ,

    y=H+vtsinθ-0.5*gt2

其中t為飛行時間。

輸入描述:

第一行一個正整數T

接下來T行每行兩個實數H,v

輸出描述:

T行每行一個數,保留五位小數。

示例1

輸入

1
0 10

輸出

10.19716

備註:

H<=100000

v<=100000

T<=1000

題解:按公式求即可。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#define ll long long
#define g 9.80665
using namespace std;
int main()
{
    int t;
    double h, v;
    cin >> t;
    while(t--){
        cin >> h >> v;
        double ans = v * sqrt(v*v+2*g*h) / g;
        printf("%.5lf\n", ans);
    }
    return 0;
}