#10016 燈泡(三角函數)
阿新 • • 發佈:2018-08-20
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 燈泡(三角函數)