poj 3190 Stall Reservations
来源:互联网 发布:node socket.io聊天室 编辑:程序博客网 时间:2024/05/22 11:50
Stall Reservations
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 6163 Accepted: 2250 Special Judge
Description
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:
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
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.
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.
Lines 2..N+1: Line i+1 describes the stall to which cow i will be assigned for her milking period.
Sample Input
2 43 65 84 7
Sample Output
412324
Hint
Explanation of the sample:
Here's a graphical schedule for this output:
Here's a graphical schedule for this output:
Time 1 2 3 4 5 6 7 8 9 10Stall 1 c1>>>>>>>>>>>>>>>>>>>>>>>>>>>Stall 2 .. c2>>>>>> c4>>>>>>>>> .. ..Stall 3 .. .. c3>>>>>>>>> .. .. .. ..Stall 4 .. .. .. c5>>>>>>>>> .. .. ..Other outputs using the same number of stalls are possible.
每一只奶牛要求在时间区间[A, B]内独享一个牛栏。问最少需要多少个牛栏。
贪心策略是优先满足A最小的奶牛,维持一个牛栏B最小堆,将新来的奶牛塞进B最小的牛栏里。
问题的麻烦点在于如何求出每个区间是第几个牛栏。其实只需要保存每个区间是第几个,再保存放在是第几个牛栏。最后再用一次排序就可以了。
#include <iostream>#include <queue>#include <cstdio>#include <algorithm>#include <vector>using namespace std;const int maxn = 1e6 + 4;struct node{ int a, b, c, d;};node no[maxn];bool cmp(node x, node y) { if(x.a == y.a) { return x.b < y.b; } else { return x.a < y.a; }}bool cmp2(node x, node y) { return x.c < y.c;}struct node2 { int x, y; bool operator < (const node2 &a) const { return x>a.x;//最小值优先 }};int main(){ int n; priority_queue<node2> que;//最小值优先; scanf("%d", &n); for(int i = 0; i < n; ++i) { scanf("%d%d", &no[i].a, &no[i].b); no[i].c = i; } sort(no, no + n, cmp); que.push(node2{no[0].b, 1}); int ans = 1; no[0].d = 1; for(int i = 1; i < n; ++i) { node2 temp = que.top(); int tempx = temp.x; int tempy = temp.y; if(no[i].a > tempx) { que.pop(); que.push(node2{no[i].b, tempy}); no[i].d = tempy; } else { ans++; que.push(node2{no[i].b, ans}); no[i].d = ans; } } sort(no, no + n, cmp2); printf("%d\n", ans); for(int i = 0; i < n; ++i) { printf("%d\n", no[i].d); } return 0;}
0 0
- poj 3190 Stall Reservations
- POJ-3190-Stall Reservations
- POJ-3190-Stall Reservations
- POJ 3190 Stall Reservations
- POJ-3190-Stall Reservations
- poj 3190Stall Reservations
- poj 3190 Stall Reservations
- poj 3190 Stall Reservations
- POJ 3190 Stall Reservations
- POJ 3190 Stall Reservations
- poj 3190 Stall Reservations
- POJ 3190 Stall Reservations
- poj 3190 Stall Reservations
- POJ 3190 Stall Reservations
- POJ 3190 Stall Reservations
- poj 3190 Stall Reservations
- poj 3190 Stall Reservations
- POJ 3190 Stall Reservations
- 大数据知识总结
- MaVen介绍
- 绝地武士Obi- Wan Kenobi
- Android中TextView首行缩进
- Effective Java 读书笔记——41:慎用重载
- poj 3190 Stall Reservations
- Pycharm中html模板不能用jinja2标签
- Spotlight 监控工具使用
- 微信小程序支付
- 用c语言实现读取配置文件源码
- According to TLD or attribute directive in tag file, attribute items does not accept any expression
- 蓝桥杯C语言B组-奖券数目
- 使用Maven创建Java项目
- 二叉树,前序,中序,后序遍历的具体实现