问题 A: yangftc的时间安排
题目描述
yangftc需要安排他的时间,有很多事情做,每个事情都有固定的开始和结束时间,因为yangftc每次只能做一件事情,如果有两个或者多个事情的时间重合了那么他就会说 NO,否则他就会说 YES 。
输入
第一个数字t代表样例数量,
后面t个样例,每个样例输入一个n表示事情的数量,后面n行每行两个数字l r表示这个事情的开始和结束时间;
输出
判断yangftc会说什么 YES或者 NO 。
数据范围 1<=t<=500 1<=n<=100 1<=l<=r<=100000
2
3
1 3
4 5
6 7
2
1 3
3 4
贪心思想求解,将结束的时间升序排个序,如果前一个结束与后一个开始时间重叠就输出NO,否则最后输出YES
#include<bits/stdc++.h>
#define swap(x, y) {int temp=x;x=y;y=temp;}
using namespace std;
const int N=1005;
typedef struct{
int x,y;
}Node;
Node node[N];
bool cmp(Node& a,Node& b){
return a.y<b.y;
}
int main()
{
int T;
cin>>T;
while(T--){
int t;
bool flag=true;
cin>>t;
for(int i=0;i<t;i++){
cin>>node[i].x>>node[i].y;
}
sort(node,node+t,cmp);
int temp=node[0].y;
for(int i=1;i<t;i++){
if(node[i].x<=temp){
cout<<"NO"<<endl;
flag=false;
break;
}else
temp=node[i].y;
}
if(flag)
cout<<"YES"<<endl;
}
return 0;
}