代码及解释
#include <stdio.h>
#include <math.h>
// 拐弯的问题
// 高中数学做过一个很类似的
// 关键是在转向的时候,值不是单调的
// 所以不用二分
const double PI = acos(-1.0);
double x,y,l,w,s,h;
double ankle(double a) {
s = l * cos(a) + w * sin(a) - x;
h = s * tan(a) + w * cos(a);
return h;
}
int main() {
while(scanf("%lf%lf%lf%lf", &x, &y, &l, &w)!=EOF) {
double left = 0.0;
double right = PI/2;
double mid1 = 0.0;
while(fabs(right-left) > 1e-8) {
mid1 = (left + right) / 2;
double midmid2 = (mid1 + right) / 2;
if(ankle(mid1) >= ankle(midmid2))
right = midmid2;
else
left = mid1;
}
if(ankle(mid1)<=y)
printf("yes\n");
else
printf("no\n");
}
return 0;
}