您的位置:首页 > 其它

HDU 2438 Turn the corner 计算几何+三分

2015-06-10 17:16 357 查看
题意:给你一个直角弯 宽度分别为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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: