zoukankan      html  css  js  c++  java
  • Stall Reservations POJ

    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
    ",k);
    55     for(int i=1; i<=n; i++)
    56     {
    57         printf("%d
    ",mp[i]);
    58     }
    59 }
    View Code
     
     
  • 相关阅读:
    Unix命令大全
    vs2008 与 IE8出现的兼容性问题
    Java 创建文件、文件夹以及临时文件
    如何修改Wamp中mysql默认空密码
    PAT 乙级真题 1003.数素数
    Tags support in htmlText flash as3
    DelphiXE4 FireMonkey 试玩记录,开发IOS应用 还是移植
    10 Great iphone App Review sites to Promote your Apps!
    HTML tags in textfield
    Delphi XE4 IOS 开发, "No eligible applications were found“
  • 原文地址:https://www.cnblogs.com/iwannabe/p/10193593.html
Copyright © 2011-2022 走看看