首先,看到這道題千萬不要被那個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...