• FOJ Problem 1016 无归之室


     Problem 1016 无归之室

    Accept: 926    Submit: 7502
    Time Limit: 1000 mSec    Memory Limit : 32768 KB

     Problem Description

    金字塔中有一个房间名叫“无归之室”。房间地面完全由相同的矩形瓷砖覆盖。房间里布满无数的机关和陷阱,这正是其名字的由来。考古队花了几年时间研究对策,最后他们想出了一个方案。一台遥控的机器人将被送入房间,解除所有机关,然后返回。为了不触动机关,机器人必须走在瓷砖的中心区域上,绝对不能碰到瓷砖的边缘。如果走错一步,机器人会被落下的岩石砸成薄饼。

    当考古队正准备行动的时候,他们发现了一件可怕的事情:他们没有考虑到机器人携带的工具箱。由于机器人必须将工具箱放在地面上才能开始解除机关,工具箱不可碰到瓷砖的边缘。现在他们急需你编程判断工具箱可否放下。

     Input

    输入文件有多组数据组成。每组数据仅含一行A, B, X, Y (1<=A, B, X, Y<=50000,均为实数)。A, B为瓷砖的长和宽,X, Y为工具箱底面的长和宽(工具箱为长方体)。最后一组数据A=B=X=Y=0,标志文件结束,不需要处理。

     Output

    若工具箱能以某种方式放在地上,则输出”Escape is possible.”,否则输出”Box cannot be dropped.”。

     Sample Input

    10 10 8 8 8 8 10 10 0 0 0 0

     Sample Output

    Escape is possible. Box cannot be dropped.

    审题:1、这一题要用实数,不能想当然直接用int

            2、sqrt()括号里要求用浮点数 不能用整数

    大矩形与小矩形存在三种情况

    1. 大矩形的长大于小矩形的长,宽大于小矩形的宽,这时肯定可以放得下去;
    2. 大矩形的对角线小于小矩形的对角线,那么也就没有地方容下小矩形了,这时判定否;//重点
    3. 当小矩形的长大于大矩形的长时,此时斜放也可能放进大矩形 //重点
    # include<iostream>
    # include<math.h>
    using namespace std;
    int QuickReject(double a,double b,double x,double y) //对全部矩形对进行初步筛选
    {
        if(x < a && y < b)  //绝对满足要求的矩形
        {
            return 1;
        }
        else if(x*x+y*y>a*a+b*b)  //绝对不满足要求的矩形
        {
            return 0;
        }
        else           //可能满足要求也可能不满足的可疑矩形
        {
            return 2;
        }
    }
    int Reject(double a,double b,double x,double y)  //对可疑矩形进行进一步筛选
    {
        double L1,L2;
        L1=(a-sqrt((double)(x*x+y*y-b*b)))/2;  
         L2=(b-sqrt((double)(x*x+y*y-a*a)))/2;  
        if( L1*L1+L2*L2>y*y )
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    int main()
    {
        double A,B,X,Y;
        while(true)
        {
            cin>>A>>B>>X>>Y;
            if(A==0 && B==0 && X==0 && Y==0)
            {
                break;
            }
            if(A < B)
            {
                double t;
                t=A;A=B;B=t;
            }
            if(X < Y)
            {
                double t;
                t=X;X=Y;Y=t;
            }
            int flag;
            flag = QuickReject(A,B,X,Y);
            if(flag == 1)
            {
                cout<<"Escape is possible."<<endl;
            }
            else if(flag == 0)
            {
                cout<<"Box cannot be dropped."<<endl;
            }
            else
            {
                flag = Reject(A,B,X,Y);
                if(flag == 1)
                {
                    cout<<"Escape is possible."<<endl;
                }
                else
                {
                    cout<<"Box cannot be dropped."<<endl;
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    转载+自己心得
    分享
    领域驱动设计系列文章汇总
    ABP集合贴
    MVC学习系列——参考
    MVC学习系列——RazorViewEngine扩展
    MVC学习系列——Model验证扩展
    MVC学习系列——HtmlHelper扩展
    MVC学习系列——ModelBinder扩展
    MacBook强制清除gardle缓存
  • 原文地址:https://www.cnblogs.com/wshyj/p/6486537.html
Copyright © 2020-2023  润新知