2026 - 搬箱子
时间限制 : 1 秒
内存限制 : 128 MB
Alice&Bob总是在一起,有一天,他们要把一个箱子搬到某个地方,但在某一个拐角处他们就为难了,那个拐弯处可以看成是一个L型,箱子可以看成是一个立方体,长宽高分别是A,B,C。如图,

他们不确定是否可以让这个箱子通过这个拐角。当然,经常玩博弈的他们肯定不会傻到再把这个箱子搬回去,经过他们的精确度量,发现拐角处入口的宽度是L1,出口的宽度是L2。现在A&B用如图所示的旋转搬箱子的办法,让箱子可以尽可能的通过拐点,问他们这种办法是否可以成功。
题目输入
输入第一行一个整数T(<100),代表测试数据个数,接下来T组测试数据,每组数据输入五个整数, L1,L2,A,B,C。
题目输出
对于每组数据,输出“Yes”(可以成功通过拐角)或者“No”(不能通过,需要另想办法)。
输入/输出样例
输入格式
2 10 6 14 4 20 10 6 15 4 20
输出格式
Yes No
C++解答
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cmath> #include <vector> using namespace std; #define pi acos(-1.0) #define eps 1e-6 double x,y,l,w; double b[3]; double cal(double angle){ return (w*sin(angle)+l*cos(angle)-x)*tan(angle)+w*cos(angle); } double solve(){ double l=0,r=pi/2,mid,midmid; while(l+eps<r){ mid=(l+r)/2; midmid=(mid+r)/2; if(cal(mid)>=cal(midmid)){ r=mid; } else{ l=mid; } } return cal(mid); } int main(){ int T; scanf("%d",&T); while(T--){ scanf("%lf%lf",&x,&y); for(int i=0;i<3;i++) scanf("%lf",&b[i]); sort(b,b+3); l=b[0],w=b[1]; bool ok=false; if(solve()+eps<y){ ok=true; } swap(l,w); if(solve()+eps<y){ ok=true; } if(ok){ printf("Yes\n"); } else{ printf("No\n"); } } return 0; }