题目大意:
给出婚礼的开始时间和结束时间,给出n场婚礼,判断司仪是否可以主持完全部婚礼,司仪要主持的时间是总时间的一半要多一点。
思路:
按照司仪要主持的时间长短排序。
代码:
#include <iostream>
using namespace std;
#include <stdio.h>
#include <cstring>
#include <algorithm>
const int N = 100005;
struct node {
int s,t,d;
}p[N];
int n;
bool cmp(const node &a,const node &b) {
return a.s + a.d < b.s + b.d;
}
bool solve() {
int temp = 0;
for(int i = 0; i < n ; i++) {
temp = max(temp,p[i].s) + p[i].d;
if(temp > p[i].t) return false;
}
return true;
}
int main() {
while(scanf("%d",&n) == 1 &&n) {
for(int i = 0 ; i < n ; i++) {
scanf("%d %d",&p[i].s,&p[i].t);
p[i].d = (p[i].t - p[i].s)/2 + 1;
}
sort(p , p+ n , cmp);
printf("%s\n",solve()?"YES":"NO");
}
return 0;
}