POJ 2376 Cleaning Shifts
来源:互联网 发布:数据可视化职位 编辑:程序博客网 时间:2024/05/17 17:55
题意:给出了n只牛的工作时间以及总的工作时间t,求最少用多少牛就可以把1-t的时间覆盖完。
题目好多坑- -,
1.如果起始时间的最小值不是1就不能开始工作。
2.加入某只牛在t1时间结束,那么接班的那只牛可以再t1+1时间开始工作。
3.这一点大家都一般都不会掉进去,我掉进去了- -,排序先按照起始时间排序再按照结束时间排序,忘记考虑某些起始时间比较小,但是结束时间比较晚的情况了。
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<iostream>#include<algorithm>using namespace std;struct node{ int x,y;}s[30000];int cmp(const void *a,const void *b){ if((*(node*)a).x==(*(node*)b).x) return (*(node*)a).y-(*(node*)b).y; return (*(node*)a).x-(*(node*)b).x;}int main(){ int n,t; while(cin>>n>>t) { for(int i=0;i<n;i++) cin>>s[i].x>>s[i].y; qsort(s,n,sizeof(node),cmp); s[n].x=0x7fffffff; int ans=0,pos=0;//pos代表当前位置,因为第一次开始时间必须是1,就先设置成0 int i=0; while(i<n) { int maxend=-1; if(pos+1<s[i].x) break; while(pos+1>=s[i].x&&i<n)//找到当前时间前的所有牛的最大结束时间 { if(s[i].y>maxend) maxend=s[i].y; i++; } ans++; pos=maxend; if(pos>=t) break; } if(pos>=t) cout<<ans<<endl; else cout<<-1<<endl; } return 0;}
0 0
- POJ 2376 Cleaning Shifts
- POJ 2376 Cleaning Shifts
- poj 2376 Cleaning Shifts
- POJ-2376-Cleaning Shifts
- poj 2376 Cleaning Shifts
- POJ 2376 Cleaning Shifts
- POJ 2376 Cleaning Shifts
- poj 2376 Cleaning Shifts
- POJ 2376 Cleaning Shifts
- poj 2376 Cleaning Shifts
- POJ-2376 Cleaning Shifts
- POJ 2376Cleaning Shifts
- POJ 2376 Cleaning Shifts
- poj 2376 Cleaning Shifts
- POJ - 2376 Cleaning Shifts
- POJ 2376 Cleaning Shifts
- POJ 2376 Cleaning Shifts
- poj 2376 Cleaning Shifts
- unity3D Shader入门指南(一)
- 解决Oracle ORA-12505, TNS:listener does not currently know of SID given in connect
- IDispatch接口 - CComDispatchDriver智能指针
- 选择排序
- Android工作笔记_Fragment底部几个按钮做主页的实现技术点
- POJ 2376 Cleaning Shifts
- 认识.TOP域名
- 搜索文件夹内的所有文件里包含某字符串的linux命令
- 推送学习
- shell排序
- opencv人脸检测基础代码
- 定义事务传播属性
- R Api
- html div margin:0 auto;不居中的原因