博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-3190 Stall Reservations---优先队列+贪心
阅读量:6914 次
发布时间:2019-06-27

本文共 1365 字,大约阅读时间需要 4 分钟。

题目链接:

题目大意:

有N头奶牛,每头奶牛都会在[1,1000000]的时间区间内的子区间进行挤奶。挤奶的时候奶牛一定要单独放在一个牛棚中。一头奶牛的结束时间与另一头奶牛的开始时间重合的时候2头奶牛不能放在同一个牛棚中,例A牛时间[5,10],B牛时间[10,12],那么需要用2个牛棚放这2头牛。输入N头牛的所有的挤奶时间区间,要求输出最少要建几个牛棚,以及每头牛挤奶的时候在第几号牛棚。

思路:

将奶牛根据挤奶开始时间排序后,从第一只奶牛进行考虑。从牛棚的优先队列中返回结束时间最短的牛棚,看该奶牛是否能放在该牛棚中。如果能,就更新该牛棚的结束时间,更新为该奶牛的开始时间;如果不能,就新创建一个牛棚,并将奶牛放在这个牛棚中。重复以上,直到所有奶牛都被放完。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 typedef pair
Pair ; 9 typedef long long ll;10 const int INF = 0x3f3f3f3f;11 const int maxn = 1e5 + 10;12 int T, n, m, cases;13 struct node14 {15 int x, y, id;16 bool operator <(const node a)const17 {18 return y > a.y;19 }20 };21 bool cmp(node a, node b)22 {23 return a.x < b.x || a.x == b.x && a.y < b.y;24 }25 node a[maxn];26 int id[maxn];27 int main()28 {29 cin >> n;30 for(int i = 1; i <= n; i++)31 {32 scanf("%d%d", &a[i].x, &a[i].y);33 a[i].id = i;34 }35 sort(a + 1, a + n + 1, cmp);36 priority_queue
q;37 int ans = 1;38 id[a[1].id] = 1;39 q.push(a[1]);40 for(int i = 2; i <= n; i++)41 {42 node now = q.top();43 if(a[i].x > now.y)44 {45 q.pop();46 id[a[i].id] = id[now.id];47 q.push(a[i]);48 }49 else50 {51 id[a[i].id] = ++ans;52 q.push(a[i]);53 }54 }55 cout<
<

 

转载于:https://www.cnblogs.com/fzl194/p/8834641.html

你可能感兴趣的文章
[翻译-ASP.NET MVC]Contact Manager开发之旅之迭代1 - 创建Contact Manager应用
查看>>
Linux C 下使用openssl 进行SHA1加密
查看>>
4星|《我的第一本创业融资指南》:投资人写的创业者融资指南
查看>>
再现一分钱中标,中国电信拿下海南政务云项目
查看>>
文件服务器之二:FTP服务器(pureftp)
查看>>
30分钟快速搭建门店智能监控视频分析
查看>>
解决drbd不能启动问题(Can not load the drbd module.)
查看>>
简单的RIP实验
查看>>
4星|《哈佛商业评论》2017年11期:高质量基础管理对企业的重要性不亚于卓越的战略思考。...
查看>>
ssh端口转发(之kettle ssh方式连接数据库)
查看>>
出现错误,显示事务没有回滚
查看>>
2、权限、变量、for 学习笔记
查看>>
Centos6安装配置rsync+inotify实时单向同步
查看>>
Cisco系列路由器密码恢复研究与实践
查看>>
顺时针打印矩阵
查看>>
Linux 2 unit5 LVM创建
查看>>
函数定义、函数的参数、函数的默认参数
查看>>
javaScript显示和隐藏(display属性)
查看>>
采用管道进行通讯的例子
查看>>
ubuntu添加一个源
查看>>