【题目大意】

给出每个奶牛挤奶的时间,同一时间同一畜栏内不会有两头奶牛挤奶,问至少要多少个畜栏。

【思路】

将奶牛按照挤奶开始的时间进行升序排序,再用一个小顶堆维护每一个畜栏当前的挤奶结束时间。对于当前的奶牛,如果所有畜栏最小的结束时间都大于它的开始时间,则新开一个畜栏,将结束时间设为当前奶牛的结束时间,加入优先队列;如果能够用结束时间最小的畜栏了,则将该畜栏的结束时间更新为当前奶牛的结束时间。

最后按照输入顺序输出结果。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. using namespace std;
  6. const int MAXN=+;
  7. typedef pair<int,int> p;
  8. /*first表示结束时间,second表示畜栏编号*/
  9. struct node
  10. {
  11. int a,b,inno,no;
  12. bool operator < (const node & x) const
  13. {
  14. return a<x.a;
  15. }
  16. }cow[MAXN];
  17. int n,num=;
  18.  
  19. void submain()
  20. {
  21. sort(cow,cow+n);
  22. priority_queue<p,vector<p>,greater<p> > que;
  23. /*建立一个以结束时间为关键字的小顶堆*/
  24.  
  25. num++;
  26. que.push(p(cow[].b,num));
  27. cow[].no=num;
  28. for (int i=;i<n;i++)
  29. {
  30. p now=que.top();
  31. if (cow[i].a<=now.first)
  32. {
  33. /*如果当前的畜栏不能共用,那么新开一个畜栏*/
  34. num++;
  35. que.push(p(cow[i].b,num));
  36. cow[i].no=num;
  37. }
  38. else
  39. {
  40. /*如果能够共用,那么久更新当前畜栏的结束时间*/
  41. que.pop();
  42. que.push(p(cow[i].b,now.second));
  43. cow[i].no=now.second;
  44. }
  45. }
  46. }
  47.  
  48. void print()
  49. {
  50. cout<<num<<endl;
  51. int out[MAXN];
  52. for (int i=;i<n;i++) out[cow[i].inno]=cow[i].no;
  53. for (int i=;i<n;i++) cout<<out[i]<<endl;
  54. }
  55.  
  56. int main()
  57. {
  58. scanf("%d",&n);
  59. for (int i=;i<n;i++)
  60. {
  61. scanf("%d%d",&cow[i].a,&cow[i].b);
  62. cow[i].inno=i;
  63. /*由于输出是按照输入顺序的,所以排序前必须要保留原来的编号*/
  64. }
  65. submain();
  66. print();
  67. return ;
  68. }

【贪心+优先队列】POJ3190-Stall Reservations的更多相关文章

  1. POJ--3190 Stall Reservations(贪心排序)

    这里 3190 Stall Reservations 按照吃草时间排序 之后我们用 优先队列维护一个结束时间 每次比较堆顶 看是否满足 满足更新后放到里面不满足就在后面添加 #include<c ...

  2. POJ3190 Stall Reservations 【贪婪】

    Stall Reservations Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3106   Accepted: 111 ...

  3. poj3190 Stall Reservations (贪心+优先队列)

    Cleaning Shifts Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) To ...

  4. poj3190 Stall Reservations(贪心+STL)

    https://vjudge.net/problem/POJ-3190 cin和scanf差这么多么..tle和300ms 思路:先对结构体x升序y升序,再对优先队列重载<,按y升序. 然后依次 ...

  5. POJ3190 Stall Reservations 贪心

    这是个典型的线程服务区间模型.一些程序要在一段时间区间上使用一段线程运行,问至少要使用多少线程来为这些程序服务? 把所有程序以左端点为第一关键字,右端点为第二关键字从小到大排序.从左向右扫描.处理当前 ...

  6. poj3190 Stall Reservations

    我一开始想用线段树,但是发现还要记录每头cow所在的棚...... 无奈之下选择正解:贪心. 用priority_queue来维护所有牛棚中结束时间最早的那个牛棚,即可得出答案. 注意代码实现的细节. ...

  7. 【POJ - 3190 】Stall Reservations(贪心+优先队列)

    Stall Reservations 原文是English,这里直接上中文吧 Descriptions: 这里有N只 (1 <= N <= 50,000) 挑剔的奶牛! 他们如此挑剔以致于 ...

  8. Stall Reservations POJ - 3190 (贪心+优先队列)

    Stall Reservations Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11002   Accepted: 38 ...

  9. POJ - 3190 Stall Reservations 贪心+自定义优先级的优先队列(求含不重叠子序列的多个序列最小值问题)

    Stall Reservations Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one w ...

随机推荐

  1. js函数定义方法

    1.函数声明 其语法为 function functionName(){ //函数体 } 首先是function关键字,然后是函数名,其重要特征是函数声明提升,即在执行代码之前会先读取函数声明,使其在 ...

  2. java封装示例代码

    package com.imooc; public class Telphone { private float screen; private float cpu; private float me ...

  3. 特征工程(Feature Engineering)

    一.什么是特征工程? "Feature engineering is the process of transforming raw data into features that bett ...

  4. 直观理解js自执行函数

    要在函数体后面加括号就能立即调用,则这个函数必须是函数表达式,不能是函数声明: Jslint推荐的写法: (function(){alert(1);}()); 针对函数声明,使用().!.+.-.=. ...

  5. 为什么IO多路复用需要采用非阻塞式IO

    近段时间开始学习<Unix网络编程>,代码实现了一个简单的IO多路复用+阻塞式的服务端,在学习了非阻塞式IO后,有一个疑问,即: 假如调用了select,并且关注了几个描述字,当关注的描述 ...

  6. python爬虫模块之调度模块

    调度模块也就是对之前所以的模块的一个调度,作为一个流水的入口. 下面的代码的获取数据部分暂时没有写,细节部分在实际开发中,要根据要求再定义,这里说的是使用方法 from savedb import D ...

  7. MS SQLServer 批量附加数据库

    /************************************************************ * 标题:MS SQLServer 批量附加数据库 * 说明:请根据下面的注 ...

  8. 2017多校第4场 HDU 6078 Wavel Sequence DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6078 题意:求两个序列的公共波形子序列的个数. 解法: 类似于最长公共上升子序列,对于每个i,只考虑存 ...

  9. C# 网络编程小计 20150202

    在学习网络Socket编程之前必须得学会多线程编程,这个是经常会用的到 可参考:http://www.cnblogs.com/GIS_zhou/articles/1839248.html System ...

  10. FineReport——JS二次开发(隐藏下拉框控件的倒三角)

    在对FR控件进行二次开发的过程中,需要自定义样式,比如下拉框控件带有自动检索的功能,但是又希望它的显示样式如同文本框一样,这时就需要隐藏多余的部分. 在对在线文档的查阅中可以发现很多选择器适用于多种控 ...