HDU2552 推公式 用公式

2021-06-06 15:34:00 字數 1064 閱讀 5083

首先,看到這道題千萬不要被那個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( arctan(1/u)+arctan(1/v) ) = (tan(arctan(1/u)) + tan(arctan(1/v)))/(1-tan(arctan(1/u))*tan(arctan(1/v))) = (1/u + 1/v) / (1 - 1/(uv))

所以解得 uv = 1 + us + vs

最後可以推出,無論輸入什麼,結果都是1。。。。

第二:直接用內的公式atan(x)求解。但這裡有個問題了,最後結果要化整。那麼一般就會想到用int來轉換,可是結果卻一直wa!沒能解釋(希望看到這篇部落格的大牛們賜教呀)!另外,更奇怪的是用printf("%.0lf\n",k)卻過了。這條語句的作用不也是只輸出整數部分嘛,和用int轉換貌似沒區別?

ac**:

#includeusing namespace std;

int main()

{ int t;

double p;

cin>>t;

while(t--)

{ cin>>p>>p;

cout<<1<

#include#includeusing namespace std;

int main()

{ double s,u,v;

int t;

cin>>t;

while(t--)

{ cin>>s>>u;

double p=atan(1.0/s)-atan(1.0/u);

v=1.0/tan(p);

double k=v*u-s*u-s*v;

printf("%.0lf\n",k); //過了

//cout<

HDU 2552 三足鼎立

思路 推導公式,過程如下 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 arctan 1 u arctan 1 v tan arctan 1 u tan a...

hdu 2298 推公式 解方程

hdu 2298 題目大意就是 你站在 0,0 點射箭要射到 x,y 點 告訴你箭的速度v 問通過調整角度能不能射到 x,y 點 如果可以問最小角度是多少 如果不行輸出 1 這就是一道高中物理題 當箭剛好到 x,y 點那麼所需的角度最小 設與x方向的夾角為 則y方向有y vy t g t 2 1 2...

HDU 5047 推公式 別樣輸出

題意 給n個 m 形,問最多能把平面分成多少區域 解法 推公式 f n 4n 4n 1 2 9n 1 8n 1 n 1 2 前面部分有可能超long long,所以要轉化一下,令a 8n 1,b n 1,將兩個數都化為a1 10 8 b1的形式,則 a1 10 8 b1 a2 10 8 b2 a1a...