地址:http://acm.hit.edu.cn/judge/show.php?Proid=1027
思路:假設A、B是外部矩形的長和寬,X、Y是內部矩形的長和寬,首先確保長>=寬,否則進行swap;分三種情況進行討論,當Y>=B時不可能;當X<A&&Y<B時可能;當X>=A&&Y<B時待定。對于第三種情況,將外部矩形和內部矩形的中心重疊并固定好,內部矩形可以圍繞中心旋轉,假設極限情況即內部矩形的一角剛好搭在外部矩形的長邊的延長線上,此時判斷內部矩形相鄰一角是否在外部矩形內即可。
代碼如下:
#include <stdio.h>
#include <math.h>

#define PI 3.1415926

void swap(double &x, double &y)


{
double tmp;

tmp = x;
x = y;
y = tmp;
}

int main()


{
int num;
double A, B, X, Y;
double diagIn;
double radian1, radian2;
double result;
scanf("%d", &num);
while(num)

{
num--;

scanf("%lf%lf%lf%lf", &A, &B, &X, &Y);
if(A < B)
swap(A, B);
if(X < Y)
swap(X, Y);

if(Y >= B)

{
printf("Box cannot be dropped.\n");
}
else if(X < A && Y < B)

{
printf("Escape is possible.\n");
}
else

{
diagIn = sqrt(pow(X / 2.0, 2) + pow(Y / 2.0, 2));
radian1 = acos(B / (2 * diagIn));
radian2 = 2 * acos(X / (2 * diagIn));
result = diagIn * cos(PI / 2 - radian1 - radian2);
if(result < A / 2.0)

{
printf("Escape is possible.\n");
}
else

{
printf("Box cannot be dropped.\n");
}
}
}

return 0;
}