1. 程式人生 > >#10016 燈泡(三角函數)

#10016 燈泡(三角函數)

ace 想法 部分 color urn 而且 return 同時 lol

【題目描述】

    

相比 wildleopard 的家,他的弟弟 mildleopard 比較窮。他的房子是狹窄的而且在他的房間裏面僅有一個燈泡。每天晚上,他徘徊在自己狹小的房子裏,思考如何賺更多的錢。有一天,他發現他的影子的長度隨著他在燈泡和墻壁之間走到時發生著變化。一個突然的想法出現在腦海裏,他想知道他的影子的最大長度。

技術分享圖片

【題目鏈接】

    https://loj.ac/problem/10016

【算法】

    設對應的角度為θ,列出墻上有影子情況下函數關系:D+H-( (H-h)/tanΘ + DtanΘ)發現是對勾函數,數形結合討論一波極值點位置和tanΘ範圍的關系同時影子只有地上部分時顯然長度遞增。就不用三分法求極值點了。

【代碼】

    

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int T;
 4 int main()
 5 {
 6     scanf("%d",&T);
 7     while(T--) {
 8         double H,h,D,ans;
 9         scanf("%lf%lf%lf",&H,&h,&D);
10         if(sqrt((H-h)/D)>=H/D) ans=h*D/H;
11         else if(sqrt((H-h)/D)<=(H-h)/D) ans=h;
12 else ans=D+H-2*sqrt((H-h)*D); 13 printf("%.3f\n",ans); 14 } 15 return 0; 16 }

#10016 燈泡(三角函數)