hdu2438 三分
生活随笔
收集整理的這篇文章主要介紹了
hdu2438 三分
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題意:
? ? ? 給你個90度的轉(zhuǎn)彎,和一輛標準矩形的車,問你這臺車能不能拐過去..
? ? ?y = x * tan(du) + l * sin(du) + d / cos(du);
? ? ?那么我們現(xiàn)在固定y = 題目中的那個 X則,根據(jù)(du)的不同,我們可以找到不同的x,
只要-x或者x的絕對值最大的時候小于 題目中的 Y就行了,所以先求反函數(shù)
x = y * tan(du) + l * sin(du) + d / cos(du)
? ? ? 給你個90度的轉(zhuǎn)彎,和一輛標準矩形的車,問你這臺車能不能拐過去..
思路:
? ? ?y = x * tan(du) + l * sin(du) + d / cos(du);
? ? ?那么我們現(xiàn)在固定y = 題目中的那個 X則,根據(jù)(du)的不同,我們可以找到不同的x,
只要-x或者x的絕對值最大的時候小于 題目中的 Y就行了,所以先求反函數(shù)
x = y * tan(du) + l * sin(du) + d / cos(du)
則 -y = (-x + l * sin(du) + d / cos(du)) / tan(du) 讓他最大就行了,因為他是凸(凹)性的函數(shù)所以用三分找(凸(凹)性可以根據(jù)二次導(dǎo)數(shù)判斷).?
#include<stdio.h> #include<math.h>#define eps 1e-9 double PI = acos(-1.0); double X ,Y ,L ,D;double Fun(double du) {return (-X + L * sin(du) + D / cos(du)) / tan(du); }bool solve() {if(X < D || Y < D) return 0;double low ,up ,mid ,mmid;double dis1 ,dis2;low = 0;up = PI / 2;while(1){mid = (low + up) / 2;mmid = (mid + up) / 2;dis1 = Fun(mid);dis2 = Fun(mmid);if(dis1 > dis2) up = mmid;else low = mid;if(up - low < eps) break;}return dis1 <= Y; }int main () {while(~scanf("%lf %lf %lf %lf" ,&X ,&Y ,&L ,&D)){solve()? printf("yes\n") : printf("no\n");}return 0; }
總結(jié)
以上是生活随笔為你收集整理的hdu2438 三分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu3786 找出直系亲属 水题
- 下一篇: hdu3400 两重三分