# include <stdio.h>
# include <math.h>
double a,b,c,d;
double pi=acos(-1.0);
int solve ()
{
double e=0.0;
while(e*2.0<pi)
{
double ans1=c*cos(e)+d*sin(e);
double ans2=c*sin(e)+d*cos(e);
if((ceil(ans1)<=a&&ceil(ans2)<=b)||(ceil(ans1)<=b&&ceil(ans2)<=a))
{
// printf("%lf %lf %lf %lf %lf",ans1,ans2,a,b,d);
return 1;
}
else
e+=0.003;
}
return 0 ;
}
int main ()
{
int n;
while(scanf("%d",&n)!=EOF&&n)
{
while(n--)
{
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
if(solve())
printf("Escape is possible.\n");
else
printf("Box cannot be dropped.\n");
}
}
return 0;
}
传说中的一个一个试的方法 真是牛 离散化 lol
bool check(double c,double d,double a,double b){
if(a*b<c*d)return false;
if(a<b)Swap(a,b);
if(c<d)Swap(c,d);
if(b<d)return false;
if(a>=c && b>=d)return true;
double dis=sqrt(c*c+d*d);
double p=asin(b/dis);
double q=asin(d/dis);
double sita=p-q;
double Len=c*cos(sita)+d*sin(sita);
if(Len<=a)return true;
return false;
}
还有一个解法是根据公式计算的(大神写的http://www.cppblog.com/Uriel/articles/127186.html)
他根据的是让小长方形旋转知道他的高于大长方形的高相等的时候来判断两个长方形的长度