【FOJ】Problem 1016 无归之室

推荐 http://blog.csdn.net/judy1990/article/details/7266251

简单想法会认为只要满足:

(A>X && B>Y) 那么就瓷砖就能够放下工具箱,即输出“Escape is possible.”;

否则,则认为不能放下工具箱,输出“Box cannot be dropped.”

但是这样提交后的代码必然会得到“Output Limit Exceed”~~

然后就郁闷了好一会儿……

 

回过头认真审题,会发现题目中已经给了明确的暗示:output中有句话“若工具箱能以某种方式放在地上”。于是乎,问题就展开了…

某种方式究竟有哪些方式?

联系实际,我们会很自然想到,一个矩形G1可能在 长度上 比另一个矩形G2 要长,但是将其略斜一些后,发现还是有可能放在G2中的,并且不触碰边缘。

 

综合下来,整理好后有:

1、当瓷砖的 长河宽 都比工具箱长的时候,必然是放得下的;

Case1
1    if (A>X && B>Y){
2             cout<<"Escape is possible."<<endl;
3             continue;
4         }

2、当瓷砖的 对角线 比工具箱的短的时候,必然是放不下的(为什么是比较对角线而不是边呢?);

Case2
1 else if( X*X+Y*Y>A*A+B*B){
2             cout<<"Box cannot be dropped."<<endl;
3             continue;
4         }

3、当 瓷砖的L1、L2 与斜着放的工具箱的宽 三边满足关系:L1^2 + L2^2 > Y^2时,说明完全可以放下,并且不触碰边缘;

                                                                    关系:L1^2 + L2^2 == Y^2 时,则说明正好放下,但此时已经于瓷砖的边缘相触了,是不允许的;

Case3
1 else {
2             L1=(A-sqrt((double)(X*X+Y*Y-B*B)))/2;
3             L2=(B-sqrt((double)(X*X+Y*Y-A*A)))/2;
4 
5             if (L1*L1+L2*L2>Y*Y)
6                 cout<<"Escape is possible."<<endl;
7             else
8                 cout<<"Box cannot be dropped."<<endl;
9         }

 

 

posted on 2012-07-12 15:23  Yuna_  阅读(101)  评论(0)    收藏  举报