标签:无法 clu number lse Plan ted 多少 pop style
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.
题意:N头牛,每头牛都有霸占食槽的习惯,从【cow【i】.l,cow【i】.r】,被霸占的食槽,无法给其他牛使用,就必须多几个平行食槽
问最少几个平行食槽可供牛使用,且输出每个牛所在食槽处。
思路:一个食槽,能否放入下一个牛,取决于前一个牛的cow【i-1】.r 是否小于 cow【i】.l
我们可以想到,如果cow【i-1】.r >= cow【i】.l , 就需要另外开一行食槽。
cow【i-1】.r < cow【i】.l 那我们就可以把当前的cow【i】放到这一行食槽中。
但是这样不一定是最优的,你虽让能放进去,但是前面牛的越早结束越好。
这样的话就可以用一个最小堆维护每列牛最右边的食槽,
开始我想到这,以为有多少食槽就要建立多少个堆,让后再去找它符合哪个队(显然这样不行),其实只用一个堆就可以了,
一个堆的话如果右边界最小的你都不满足,那么其他的你肯定不满足
我们还需要事前将牛按照左边界排序,因为对于同一个最小的右边界,我们肯定希望塞入左边界最小的牛
1 #include<cstdio>
2 #include<iostream>
3 #include<queue>
4 #include<algorithm>
5 using namespace std;
6
7 const int maxn = 5e4+5;
8 int n;
9 struct Node
10 {
11 int id;
12 int l,r;
13 };
14
15 int mp[maxn];
16 Node cow[maxn];
17 bool cmp1(Node a,Node b)
18 {
19 return a.l < b.l;
20 }
21
22 bool operator<(Node a,Node b)
23 {
24 return a.r > b.r;
25 }
26
27 priority_queue<Node>que;
28 int main()
29 {
30 scanf("%d",&n);
31 for(int i=1; i<=n; i++)
32 {
33 scanf("%d%d",&cow[i].l,&cow[i].r);
34 cow[i].id = i;
35 }
36 sort(cow+1,cow+1+n,cmp1);
37 int k = 1;
38 for(int i=1; i<=n; i++)
39 {
40 if(que.empty())
41 {
42 mp[cow[i].id] = k;
43 }
44 else if(que.top().r < cow[i].l)
45 {
46
47 mp[cow[i].id] = mp[que.top().id];
48 que.pop();
49 }
50 else
51 mp[cow[i].id] = ++k;
52 que.push(cow[i]);
53 }
54 printf("%d\n",k);
55 for(int i=1; i<=n; i++)
56 {
57 printf("%d\n",mp[i]);
58 }
59 }
View Code
Stall Reservations POJ - 3190(贪心)
标签:无法 clu number lse Plan ted 多少 pop style
原文地址:https://www.cnblogs.com/iwannabe/p/10193593.html