欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【CZY选讲·Yjq的棺材】

发布时间:2023/11/30 编程问答 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【CZY选讲·Yjq的棺材】 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目描述

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; }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

突然间我明白泪水映出的岁月,付出所有只为找寻你的梦。————汪峰《笑着哭》

转载于:https://www.cnblogs.com/Damitu/p/7654601.html

总结

以上是生活随笔为你收集整理的【CZY选讲·Yjq的棺材】的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。