三分法hdu2438 Turn the corner
Posted 减维
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三分法hdu2438 Turn the corner相关的知识,希望对你有一定的参考价值。
Problem Description
Mr. West bought a new car! So he is travelling around the city.
One day he comes to a vertical corner. The street he is currently in has a width x, the street he wants to turn to has a width y. The car has a length l and a width d.
Can Mr. West go across the corner?
One day he comes to a vertical corner. The street he is currently in has a width x, the street he wants to turn to has a width y. The car has a length l and a width d.
Can Mr. West go across the corner?
Input
Every line has four real numbers, x, y, l and w.
Proceed to the end of file.
Proceed to the end of file.
Output
If he can go across the corner, print "yes". Print "no" otherwise.
Sample Input
10 6 13.5 4
10 6 14.5 4
Sample Output
yes
no
题目大意:
给出街道在x轴的宽度X,y轴的宽度Y,还有车的长l和宽w,判断是否能够转弯成功。
题解:
如图:
可以很容易地观察到上面这样一条不等式:
而这个不等式可以很容易地观察出三分性质。
所以求解就很easy了。
代码如下:
#include<cstdio> #include<cmath> #include<iostream> #define PI 3.14159 using namespace std; double x,y,l,d; double pd(double a) { return sin(a)*l+d/cos(a)-y*tan(a); } int main() { while(scanf("%lf%lf%lf%lf",&x,&y,&l,&d)!=EOF) { double lm,rm,le=0.0,r=PI/2; while(fabs(r-le)>1e-6) { lm=(le*2.0+r)/3.0; rm=(le+r*2.0)/3.0; if(pd(lm)>pd(rm)) r=rm; else le=lm; } if(pd(le)<=y) printf("yes\\n"); else printf("no\\n"); } }
以上是关于三分法hdu2438 Turn the corner的主要内容,如果未能解决你的问题,请参考以下文章
HDOJ2438:Turn the corner(计算几何 + 三分)
codeforces 782B The Meeting Place Cannot Be Changed+hdu 4355+hdu 2438 (三分)
[hdu4355]Party All the Time(三分)