[2018.10.25 T1] 妹子

暫無鏈接

妹子

【題目描述】

萬人迷皮皮軒收到了很多妹子的禮物,由於皮皮軒覺得每個妹子都不錯,所以將她們禮物的包裝盒都好好保存,但長此以往皮皮軒的房間裏都堆不下了,所以只能考慮將一些包裝盒放進其他包裝盒裏節省空間。

方便起見,我們不考慮包裝盒的高度和厚度,只考慮包裝盒的長寬。

一句話題意:給出兩個矩形,問是否可以將一個矩形放在另一個矩形的內部(含邊界),多測。

【輸入】

第一行,一個整數nn,表示數據組數。

對於下面的每一組數據:

第一行,四個整數a1,b1,a2,b2a_1,b_1,a_2,b_2 表示兩個盒子的長寬。

【輸出】

nn行,每行一個 “YesYes” 或"NoNo"(不含引號),分別表示其中一個盒子可以放到另一個盒子中或兩個盒子都不能放到另一個盒子中。

【輸入樣例】

4
4 4 4 4
3 2 4 5
4 5 5 5
1 7 3 2

【輸出樣例】

Yes
Yes
Yes
No

【提示】
【數據規模與約定】

對於100%100\% 的數據,n10a1,b1,a2,b21000n≤10,a1,b1,a2,b2≤1000

題解

靈活運用各種小學/初中/高中幾何知識AA之。

代碼
#include<bits/stdc++.h>
#define DB double
using namespace std;
struct box{int x,y;}A,B;
static int n;
int ans;
bool check(box A,box B){
	if(A.x<=B.x&&A.y<=B.y) return 1;
	DB Ad=sqrt((DB)(1.0*A.x*A.x+1.0*A.y*A.y));
	DB _1=asin((DB)(1.0*A.x/Ad)); _1=_1*2.0;
	DB _2=acos((DB)(1.0*B.y/Ad)),k=Ad*sin(_1+_2);
	if(k<=B.x) return 1;
	return 0;
}
void in(){scanf("%d%d%d%d",&A.x,&A.y,&B.x,&B.y);}
void ac()
{
	if(A.x>A.y)swap(A.x,A.y); 
	if(B.x>B.y)swap(B.x,B.y);
	ans=check(A,B)|check(B,A);
	ans?puts("Yes"):puts("No");
}
int main(){for(scanf("%d",&n);n--;)in(),ac();}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章