题意简介

有一个司仪,要主持n场婚礼,给出婚礼的起始时间和终止时间,每个婚礼需要超过一半的时间做为仪式,并且仪式不能终止。问说司仪能否主持n场婚礼。

输入格式

多组数据,每组数据输入一个\(N\)(\(N\)<=100000),接下来N行,每行输入\(Si\),\(Ti\)两个数,当输入\(n=0\)时输入结束

输出格式

每行对应每组数据,用"YES"或"NO"代表能否主持完n场婚礼

算法分析

一眼贪心,要求主持完全部婚礼,每个婚礼主持时间为 \((Ti-Si)/2+1\) 因为时间必须超过一半,所以要加一

然后按照每个婚礼结束时间排序,贪心策略优先选择越早结束的婚礼解决,留时间解决后面的婚礼,然后Judge判断一下就可以了

代码

#include<bits/stdc++.h>
#define re register
#define ll long long
using namespace std;
inline int read()
{
int k=1,sum=0;
char c=getchar();
for(;c<'0' || c>'9';c=getchar()) if(c=='-') k=-1;
for(;c>='0' && c<='9';c=getchar()) sum=sum*10+c-'0';
return sum*k;
}
const int N=1e5+10;
int n;
struct Task{
int s,t,d;
}a[N];
inline bool cmp(Task x,Task y){
return x.s+x.d<y.s+y.d;
}
inline bool Judge(){
int cnt=0;
for(re int i=1;i<=n;++i) {
cnt=max(cnt,a[i].s)+a[i].d;
if(cnt>a[i].t) return 0;
}
return 1;
}
int main()
{
while(scanf("%d",&n)==1 && n>0) {
for(re int i=1;i<=n;++i) {
a[i].s=read(),a[i].t=read();
a[i].d=((a[i].t-a[i].s)>>1)+1;
}
sort(a+1,a+n+1,cmp);
cout<<((Judge()==1?"YES":"NO"))<<endl;
}
return 0;
}
/*
3
1 5
2 4
3 6
2
1 5
4 6
0
*/

最新文章

  1. MVC 验证码实现( 简易版)
  2. 中国知网cnki(永久会员账号)
  3. Python 学习第十八天 js 正则及其它前端知识
  4. 【原创】Scrum模式也要根据自身特点微调,不能教条
  5. linux运维的认知及RHEL7 Unix/Linux 系统 介绍和安装
  6. mongodb 文件,图片存储数据库
  7. HMTL5的 video 在IOS7中碰到的坑
  8. jquery prop and attr
  9. c#中[Flags] 枚举类型定义问题_百度知道
  10. Oracle存储过程 --3
  11. echarts样式修改
  12. Android 获取 AudioRecord 麦克风音量大小并做选择性发送
  13. Vue.js-11:第十一章 - Vue 中 ref 的使用
  14. 自定义GridControl编辑器
  15. [转]MySQL忘记密码的正确解决方法
  16. 20170822xlVBA ExportCellPhone
  17. 关于cordova 状态栏设置
  18. CentOS的ssh sftp配置及权限设置[转载-验证可用]
  19. [转]mysql update case when和where之间的注意事项
  20. Daily Scrum 11.14

热门文章

  1. 字符串之————图文讲解字符串排序(LSD、MSD)
  2. 在Win10右键菜单添加校验文件Hash值命令
  3. Day 8 面试题
  4. ActiveMQ+ZooKeeper搭建高可用集群
  5. Linux入门基础之 下
  6. PHPstorm出现的端口号错误问题(502)
  7. 读《深入理解Elasticsearch》点滴-聚合-top_hits
  8. ZK集群如何保证数据一致性源码阅读
  9. YiShaAdmin,基于.NET Core Web开源的后台快速开发框架
  10. Scala Try Catch Finally