問題 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;
}