【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 }

浙公网安备 33010602011771号