2026 - 搬箱子

通过次数

0

提交次数

0

时间限制 : 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;
}