Posted on 2010-09-20 22:06
Uriel 閱讀(658)
評論(0) 編輯 收藏 引用 所屬分類:
POJ 、
計算幾何
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>=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;
}


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