題目描述?
Yjq想要將一個長為寬為的矩形棺材(棺材表面絕對光滑,所以棺材可以任意的滑動)拖過一個L型墓道。? 如圖所示,L型墓道兩個走廊的寬度分別是和,呈90°,并且走廊的長度遠大于。? 現在Hja想知道對于給定的,,,最大的是多少,如果無論如何棺材都不可能通過,則輸出"My poor head =(" 。?
數據范圍?
1≤,,≤10^4。
?
題解:
????? ①三分法求下凸函數極值。
????? ③具體就是求靠外直角的那條斜邊到內拐角點的距離,然后比較和寬的大小就可以說明能夠通過了
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
int a,b,l;
double get(double v1)
{double v2=sqrt(l*l-v1*v1);if (a*v1+b*v2<v1*v2) return -1e+20;else return (a*v1+b*v2-v1*v2)/l;
}
int main()
{freopen("b.in","r",stdin);freopen("b.out","w",stdout);scanf("%d%d%d",&a,&b,&l);if (a>=l && b>=l) printf("%d.0000000\n",l);else{if (a>=l) printf("%d.0000000\n",b);else{if (b>=l) printf("%d.0000000\n",a);else{double lv=0.0,rv=l;for (int c=1;c<=100;c++){double m1=(rv-lv)/3.0+lv;double m2=lv+rv-m1;if (get(m1)<0.0 || get(m2)<0.0){printf("My poor head =(\n");return 0;}if (get(m1)<get(m2)) rv=m2;else lv=m1;}printf("%.7lf\n",get(rv));}}}return 0;
}
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
突然間我明白淚水映出的歲月,付出所有只為找尋你的夢。————汪峰《笑著哭》