Stall Reservations 贪心+自定义优先级的优先队列(求含不重叠子序列的多个序列最小值问题)
2017-07-20 16:41
453 查看
Stall Reservations
Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one will only be milked over some precise time interval A..B (1 <= A <= B <= 1,000,000), which includes both times A and B. Obviously, FJ must create a reservation system to determine which stall each cow can be assigned for her milking time. Of course, no cow will share such a private moment with other cows.
Help FJ by determining:
The minimum number of stalls required in the barn so that each cow can have her private milking period
An assignment of cows to these stalls over time
Many answers are correct for each test dataset; a program will grade your answer.
Input
Line 1: A single integer, N
Lines 2..N+1: Line i+1 describes cow i's milking interval with two space-separated integers.
Output
Line 1: The minimum number of stalls the barn must have.
Lines 2..N+1: Line i+1 describes the stall to which cow i will be assigned for her milking period.
Sample Input
Sample Output
Hint
Explanation of the sample:
Here's a graphical schedule for this output:
Other outputs using the same number of stalls are possible. //!!!
总结:开始时间升序排,每个条件都用上,求含不重叠子序列的最少序列数;
结束时间升序排,只用部分条件,求一个序列含不重叠子序列最多数。
Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one will only be milked over some precise time interval A..B (1 <= A <= B <= 1,000,000), which includes both times A and B. Obviously, FJ must create a reservation system to determine which stall each cow can be assigned for her milking time. Of course, no cow will share such a private moment with other cows.
Help FJ by determining:
The minimum number of stalls required in the barn so that each cow can have her private milking period
An assignment of cows to these stalls over time
Many answers are correct for each test dataset; a program will grade your answer.
Input
Line 1: A single integer, N
Lines 2..N+1: Line i+1 describes cow i's milking interval with two space-separated integers.
Output
Line 1: The minimum number of stalls the barn must have.
Lines 2..N+1: Line i+1 describes the stall to which cow i will be assigned for her milking period.
Sample Input
5 1 10 2 4 3 6 5 8 4 7
Sample Output
4 1 2 3 2 4
Hint
Explanation of the sample:
Here's a graphical schedule for this output:
Time 1 2 3 4 5 6 7 8 9 10 Stall 1 c1>>>>>>>>>>>>>>>>>>>>>>>>>>> Stall 2 .. c2>>>>>> c4>>>>>>>>> .. .. Stall 3 .. .. c3>>>>>>>>> .. .. .. .. Stall 4 .. .. .. c5>>>>>>>>> .. .. ..
Other outputs using the same number of stalls are possible. //!!!
首先根据挤奶时间的先后顺序排序。。。然后将第一头牛加入优先队列。。然后就是加入优先队列的牛应该根据越早结束挤奶那么优先级更高,如果时间结束点相等,那么开始时间早的优先级高。。。
然后从前向后枚举。如果碰到有牛的挤奶时间的开始值大于优先队列的首部的结束值,那么说明这两头牛可以一起公用一个挤奶房。。然后从优先队列中删除这头牛。。那么这个问题就得到解决了。。。
开始时间升序排序,从左往右排,不会出现排在队首左边的情况。(贪心)总结:开始时间升序排,每个条件都用上,求含不重叠子序列的最少序列数;
结束时间升序排,只用部分条件,求一个序列含不重叠子序列最多数。
#include<stdio.h> #include<algorithm> #include<queue> using namespace std; struct Node{ int x,y,no; friend bool operator<(Node a,Node b) { if(a.y==b.y) return a.x>b.x; return a.y>b.y; } }node[50005]; bool cmp(Node a,Node b) { if(a.x==b.x) return a.y<b.y; return a.x<b.x; } int a[50005]; priority_queue<Node> q; int main() { int n,c,i; scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d%d",&node[i].x,&node[i].y); node[i].no=i; } sort(node+1,node+n+1,cmp); q.push(node[1]); a[node[1].no]=1; c=1; for(i=2;i<=n;i++){ if(q.size()&&node[i].x>q.top().y){ a[node[i].no]=a[q.top().no]; q.pop(); } else{ c++; a[node[i].no]=c; } q.push(node[i]); } printf("%d\n",c); for(i=1;i<=n;i++){ printf("%d\n",a[i]); } return 0; }
相关文章推荐
- 今年暑假不AC 贪心(求序列中不重叠子序列的最大值问题)
- 51NOD 1163——最高的奖励(可用优先队列解决的贪心问题)
- HDU 6000 Wash【优先队列优化贪心】【最大值+最小值】
- 自定义优先队列和操作符重载问题
- 优先队列+括号配对 51Nod1476 括号序列的最小代价
- 优先队列 自定义优先级
- (hdu step 8.1.5)看病要排队(优先队列的基本使用——在看病排队时,优先级高的排在前面.求在这种情况下的出队序列)
- 【贪心+优先队列】1428 活动安排问题【51nod】【难度:2级算法题】
- 最小优先队列 解决TopK问题
- 贪心+优先队列-51nod-1428 活动安排问题
- Cocos2D v3.x中关于重叠触摸层优先级的问题
- 优先队列及最小堆最大堆
- 51NOD 1255 字典序最小的子序列 【贪心】
- 数据结构实现之最小索引优先队列
- UVa 1153 Keep the Customer Satisfied 【贪心 优先队列】
- Hrbust 2171 最佳工厂【贪心+优先队列】经典题型
- Huffman编码的贪心实现,使用优先队列
- 51nod -1255 字典序最小的子序列(贪心)
- [CF752D]Santa Claus and a Palindrome(优先队列,贪心乱搞)
- BFS 八数码问题 typedef int State[9]; (BFS A*算法与优先队列)