hdu 2298 推公式 解方程

2021-08-15 02:10:25 字數 1168 閱讀 5169

/*

hdu 2298

題目大意就是

你站在(0,0)點射箭要射到(x,y)點

告訴你箭的速度v

問通過調整角度能不能射到(x,y)點

如果可以問最小角度是多少

如果不行輸出-1

這就是一道高中物理題

當箭剛好到(x,y)點那麼所需的角度最小

設與x方向的夾角為α

則y方向有y=vy*t-g*t^2*1/2

x方向有x=vx*t

將速度正交分解得

vx=v*cos(α)

vy=v*sin(α)

然後化簡成為tan(α)的一元二次方程,得

g*x^2*(tan(α))^2-2*x*v^2+(2*v^2*y+g*x^2)=0

(這題好像不能用反向的平拋運動來求,不知道是我求錯了還是出題者根本沒考慮)

最後解方程求反正切,得到兩個角

輸出範圍在atan(y/x)~pi/2(至於為什麼是這個範圍,應該挺好想的,角度要符合事實)之間且小的那個角就行

*/#include

#include

#include

#include

#include

#define mod 1000000007

#define max 100005

#define ll long long

#define pi acos(-1)

#define g 9.8

using namespace std;

int main()

double res1=(-b+sqrt(d))/(2*a);

double res2=(-b-sqrt(d))/(2*a);

double ans1=atan(res1);

double ans2=atan(res2);

double angle=atan(y/x);

if(ans1>angle&&ans1angle&&ans2ans2)

printf("%.6lf\n",ans2);

else

printf("%.6lf\n",ans1);

}else if(ans1>angle&&ans1=pi/2)

else

}return 0;

}

推導公式 hdu2298 Toxophily

剛開始想用二分去做,卻沒有證明單調性 如果非要用二分做,應該先用三分找到最頂端的點,然後再二分,這樣太麻煩了,其實,可以乙個公式搞定 y x tan gx x 2 v v cos cos 相信這一步大家都能推出來,然後問題來了 1 cos cos 1等於sin 2 cos 2 那麼1 cos cos...

HDU 2298 三分 二分物理題 模板

題目 題意 二維面上給定目標座標和初速度,求在座標原點 0,0 發射出去能經過目標點的最小的角度。思路 寫出乙個高度關於角度的一元二次方程。看這個最大高度是否 y,判斷是否有解。這是乙個二次型凸函式。假如對稱軸為x,而且最大高度 y 即有解 0,x 這一段滿足二分單調性,找出函式值最接近y的角度即可...

HDU2552 推公式 用公式

首先,看到這道題千萬不要被那個atan x 的公式嚇倒,根本用不著!兩種思路來做 第一 推導公式,過程如下 1.tan a b tan a tan b 1 tan a tan b 2.tan atan x x arctan 1 s arctan 1 u arctan 1 v 所以得1 s tan a...