2016Y GDUT新生杯初赛 Problem E: 套套套

来源:互联网 发布:淘宝联邦止咳水暗语 编辑:程序博客网 时间:2024/05/02 05:01

Problem E: 套套套

Description

矩形A能与矩形B不接触的放在矩形B里就称为矩形A能嵌套进矩形B。

给你n个矩形,编写程序,判断它们能否互不接触嵌套n层。

如:有2 * 2 , 4*5,3*4 三个矩形。

 

方案一嵌套非法,但是方案二合法(嵌套顺序任意),所以2*2,3*4,4*5满足条件

Input

第一行一个整数t(t < 15 ),表示有t组数据。 每组数据第一行一个整数n(n < 10000),矩形的个数,接下去的n行,每行两个正整数x和y(由空格分开),第i行表示第i个矩形的长为x和宽为y。(0 < y <= x < 100000 )

Output

每组数据输出一行,矩形能完成嵌套则输出“Yes”,否则输出“No”。(不包含双引号)

Sample Input

2

3

2 2

4 3

5 4

2

2 1

3 1

Sample Output

Yes

No

分析解答:

套套=^=,这题我们先看,要套进去怎么搞?肯定是面积小的套在面积大里面呀,拿到,你还能把面积大的套在面积小的里面吗?

所以首先昂,我们就可以这样做,在读入的时候先把这个矩形的面积算出,为了方便,我们可以写一个结构体,结构体里面有一个面积,长,宽。

然后我们把面积排序,从小到大从大到小都随便啦,这里我采用从小到大,我们看一下,是不是前面这个的长或者宽是大于等于后面这个的,如果大于等于那么就直接break掉,因为一个不符合就全都不符合了。

上代码:

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;typedef unsigned long long ULL;class juxing{public:    ULL chang;    ULL kuan;    ULL area;}all[10005];int main(){    int T;    cin>>T;    while(T--)    {        int n;        cin>>n;        for(int i=0;i<n;++i)        {            cin>>all[i].chang>>all[i].kuan;            all[i].area=all[i].chang*all[i].kuan;        }        sort(all,all+n,[](juxing a,juxing b){return a.area<b.area;});        int flag_can=1;        for(int i=1;i<n;++i)        {            if(all[i].chang<=all[i-1].chang || all[i].kuan<=all[i-1].kuan)            {                flag_can=0;                break;            }        }        if(flag_can)        {            cout<<"Yes"<<endl;        }        else            cout<<"No"<<endl;    }}


0 0
原创粉丝点击