题意:给你一个直角弯 宽度分别为x y 再给你一辆汽车 长和宽分别为 l w 问你这辆车能不能转过这个直角弯
思路:汽车能不能转过弯 只需看会不会碰到内角即可 至于能不能碰到内角 我们以汽车左边线建立方程 判断即可
#include <cstdio>
#include <cmath>
#include <cstdlib>
using namespace std;
const double eps = 1e-8;
const double PI = acos(-1.0);
double x, y, l, w;
double F(double a){
return ( x - l * sin(a) - w / cos(a) )/ tan(a);
}
void solve(){
double l = 0, r = PI / 2, m, mm;
if(x - eps <= w || y - eps <= w){
//这里需要注意 如果一开始汽车的宽度就大于等于路的宽度 就直接输出no
printf("no\n");
return;
}
while(l + eps < r){
m = (l + r) / 2;
mm = (m + r) / 2;
if(-F(m) > -F(mm)) r = mm;
else l = m;
}
if(-F(l) <= y ) printf("yes\n");
else printf("no\n");
}
int main()
{
while(~scanf("%lf%lf%lf%lf", &x, &y, &l, &w)) solve();
return 0;
}