1 条题解

  • 0
    @ 2025-5-19 19:56:03

    题目分析

    我们需要判断一个尺寸为A×B×C的长方体砖块能否通过一个尺寸为D×E的矩形洞口。关键在于比较砖块的某个侧面是否能完全放入洞口。

    关键思路

    砖块的侧面选择:砖块有三个不同的侧面,分别是A×B、A×C和B×C。我们需要检查这些侧面中是否至少有一个能放入洞口。

    洞口的适配:对于每个砖块的侧面,我们需要检查其长和宽是否能以某种方向(旋转90度)适配洞口的长和宽。

    尺寸比较:对于砖块的每个侧面,计算其最小和最大边长,然后与洞口的最小和最大边长比较。如果砖块侧面的最小边 ≤ 洞口的最小边,且砖块侧面的最大边 ≤ 洞口的最大边,则可以通过。

    解决步骤

    输入处理:读取五个浮点数A、B、C、D、E。

    砖块侧面生成:计算砖块的三个侧面尺寸:(A,B)、(A,C)、(B,C)。

    侧面适配检查:对于每个侧面,计算其最小和最大边长,然后与洞口的最小和最大边长比较。

    结果输出:如果任何一个侧面满足适配条件,输出"YES";否则输出"NO"。

    //qscqesze
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <set>
    #include <bitset>
    #include <vector>
    #include <sstream>
    #include <queue>
    #include <typeinfo>
    #include <fstream>
    #include <map>
    #include <stack>
    typedef long long ll;
    using namespace std;
    //freopen("D.in","r",stdin);
    //freopen("D.out","w",stdout);
    #define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
    #define maxn 110000
    #define mod 10007
    #define eps 1e-9
    #define pi 3.1415926
    int Num;
    //const int inf=0x7fffffff;   //§ß§é§à§é¨f§³
    const ll Inf=0x3f3f3f3f3f3f3f3fll;
    inline ll read()
    {
        ll x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    //**************************************************************************************
    
    
    double a[3],d,e;
    int flag=0;
    void solve(int x,int y)
    {
        for(double i=0;i<=90;i+=0.001)
        {
            double ttt = i*pi/180;
            double l = a[x]*cos(ttt)+a[y]*sin(ttt);
            double k = a[x]*sin(ttt)+a[y]*cos(ttt);
            if(l<=d&&k<=e)
            {
                cout<<"YES"<<endl;
                flag=1;
                return;
            }
        }
    }
    int main()
    {
        freopen("bricks.in","r",stdin);
        freopen("bricks.out","w",stdout);
        for(int i=0;i<3;i++)
            cin>>a[i];
        cin>>d>>e;
        for(int i=0;i<3;i++)
        {
            for(int j=0;j<3;j++)
            {
                if(i==j)
                    continue;
                solve(i,j);
                if(flag)
                    return 0;
            }
        }
        printf("NO\n");
    }
    ```
    
    ```
    • 1

    信息

    ID
    1173
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者