[2018.10.25 T1] 妹子

版权声明:大佬您能赏脸,蒟蒻倍感荣幸,还请联系我让我好好膜拜。 https://blog.csdn.net/ShadyPi/article/details/83409871

暂无链接

妹子

【题目描述】

万人迷皮皮轩收到了很多妹子的礼物,由于皮皮轩觉得每个妹子都不错,所以将她们礼物的包装盒都好好保存,但长此以往皮皮轩的房间里都堆不下了,所以只能考虑将一些包装盒放进其他包装盒里节省空间。

方便起见,我们不考虑包装盒的高度和厚度,只考虑包装盒的长宽。

一句话题意:给出两个矩形,问是否可以将一个矩形放在另一个矩形的内部(含边界),多测。

【输入】

第一行,一个整数 n n ,表示数据组数。

对于下面的每一组数据:

第一行,四个整数 a 1 , b 1 , a 2 , b 2 a_1,b_1,a_2,b_2 表示两个盒子的长宽。

【输出】

n n 行,每行一个 “ Y e s Yes ” 或" N o No "(不含引号),分别表示其中一个盒子可以放到另一个盒子中或两个盒子都不能放到另一个盒子中。

【输入样例】

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

【输出样例】

Yes
Yes
Yes
No

【提示】
【数据规模与约定】

对于 100 % 100\% 的数据, n 10 a 1 , b 1 , a 2 , b 2 1000 n≤10,a1,b1,a2,b2≤1000

题解

灵活运用各种小学/初中/高中几何知识 A A 之。

代码
#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();}

猜你喜欢

转载自blog.csdn.net/ShadyPi/article/details/83409871
t1
今日推荐