版权声明:Johnson https://blog.csdn.net/m0_38055352/article/details/91347980
这段时间要沉迷刷题一段时间了,就让CSDN陪我一起吧!
一、题目大意
题目的意思大致就是,给你n个矩形的长和宽,每一个矩形可以进行90度旋转或不转,旋转过后宽和高会互换,求问给定n个矩形的长和宽,是否可以通过旋转使这n个矩阵的高保证不增序排列,即每一个矩形的高一定小于等于其前一个矩形的高。
二、题目思路以及AC代码
这题是一个很简单的贪心,贪心策略很简单,只要保证每次把宽和高两个值中小于等于前一个矩形高的最大值作为当前矩形的高,那么就可以保证尽可能的使旋转之后满足题意,但如果到某个矩形发现其宽和高都大于前一个矩形的高,那么就不可以通过旋转满足题意。
下面给出AC代码:
#include <iostream>
#include <algorithm>
#define MAXN 100010
using namespace std;
typedef pair<int, int> pp;
int n;
pp recs[MAXN];
int choose(int a, int b, int c){
if (a <= c && b <= c) {
return max(a, b);
}
if (a <= c && b > c) {
return a;
}
if (a > c && b <= c) {
return b;
}
return -1;
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++) {
cin >> recs[i].first >> recs[i].second;
}
int height = max(recs[0].first, recs[0].second);
for (int i = 1; i < n; i++) {
height = choose(recs[i].first, recs[i].second, height);
if (height == -1) {
break;
}
}
if (height == -1) cout << "NO" << endl;
else cout << "YES" << endl;
return 0;
}
如果有问题,欢迎大家指正!!!