【工具箱】解题报告

来源:互联网 发布:农村淘宝现状分析 编辑:程序博客网 时间:2024/06/06 04:24

工具箱


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

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


输入格式

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


输出格式

若工具箱能以某种方式放在地上,则输出Escapeis possible.”,否则输出Boxcannot be dropped.”


输入样例

1010 8 8

8 810 10

0 00 0


输出样例

Escapeis possible.

Boxcannot be dropped.


数据范围:

100%的数据满足1A,B,X,Y50000


据说是一道解析几何。据说我们还没有学解析几何。。。

这道题要枚举角度theta,感觉有点奇葩呀,角度怎么枚举得完呢??不过这确实是标准解法。。


我没有做出来。贴标程。


#include <stdio.h>#include <math.h>double t=3.1415926535897932384626433832795/4;int main(){ FILE *fp,*fo;  double a,b,c,d,k;  double ar,l1,l2;  fp=fopen("box.in","r");  fo=fopen("box.out","w");    fscanf(fp,"%lf %lf %lf %lf",&a,&b,&c,&d);    while(a)    {if (a<b) k=a,a=b,b=k;     if (c<d) k=c,c=d,d=k;     if (a*b<c*d || d>b) fprintf(fo,"Box cannot be dropped.\n");     else if (c<=a) fprintf(fo,"Escape is possible.\n");      else      {for(ar=0.001;ar<=1;ar+=0.001)        {         l1=c*ar+sqrt(1-ar*ar)*d;         l2=(c-d*sqrt(1-ar*ar)/ar)*sqrt(1-ar*ar)+d/ar;         if (l1<=b && l2<=a)            {fprintf(fo,"Escape is possible.\n");            break;           }        }              if (l1>b || l2>a) fprintf(fo,"Box cannot be dropped.\n");      }     fscanf(fp,"%lf %lf %lf %lf",&a,&b,&c,&d);    }  fclose(fp);  fclose(fo);  return(0);}



原创粉丝点击