Uriel's Corner

Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
posts - 0, comments - 50, trackbacks - 0, articles - 594
        POJ 1380是去年十月做的,今天发现POJ 2172与POJ 1380一样的。。拿原来代码直接贴了。。

        1380是问一个矩形能否塞进另一个矩形,2172其实一回事,虽然变成三维,但是只要判三次就行了。。



如图,假设小矩形正好卡进去的情况,求出边长Len需要多少,Len>a则塞不进

代码中:∠1=∠sita      ∠1+∠2=∠p

以下是2172的代码,1380判定过程跟这个一样,而且只要判一次就行
//Problem: 2172  User: Uriel 
//Memory: 208K  Time: 32MS 
//Language: C++  Result: Accepted 
//2010.09.20

#include
<math.h>
#include
<stdio.h>
#include
<stdlib.h>

struct point {
    
double x,y,h;
}
a,b;

void Swap(double & a,double & b){
    
double t;
    t
=a;
    a
=b;
    b
=t;
}


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>=&& 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;
}


int main(){
    scanf(
"%lf %lf %lf %lf %lf",&a.x,&a.y,&a.h,&b.x,&b.y);
    
if(check(a.x,a.y,b.x,b.y)||check(a.x,a.h,b.x,b.y)||check(a.y,a.h,b.x,b.y))puts("YES");
    
else
        puts(
"NO");
    
return 0;
}



只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理