• Stall Reservations(贪心+优先队列)


    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:
    • 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<string.h>
    #include<stdio.h>
    #include<stack>
    #include<queue>
    #include<vector>
    #include<algorithm>
    using namespace std;
    struct node
    {
       int start_time;
       int end_time;
       int num;
        friend bool operator<(node a,node b)
       {
           if( a.end_time==b.end_time)
           return a.start_time>b.start_time;
           return a.end_time>b.end_time;
       }
    
    }arr[50050],now;
    bool cmp(node a,node b)
    {
        if(a.start_time==b.start_time)
            return a.end_time<b.end_time;
        return a.start_time<b.start_time;
    }
    int ans[50050]={0};
    int main()
    {
        int i,n,l=1,MAX=-1;
        while(scanf("%d",&n)!=-1)
        {
            l=1;
            priority_queue<node>s,q;
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&arr[i].start_time,&arr[i].end_time);
            arr[i].num=i;
        }
        sort(arr,arr+n,cmp);
        s.push(arr[0]);
        ans[s.top().num]=l;
        for(i=1;i<n;i++)
        {
                now=s.top();
              if(arr[i].start_time>now.end_time)
              {
                  ans[arr[i].num]=ans[now.num];
                  s.pop();
              }
              else
                  ans[arr[i].num]=++l;
                  s.push(arr[i]);
        }
          printf("%d
    ",l);
         for(i=0;i<n;i++)
         {
             printf("%d
    ",ans[i]);
    
         }
        }
        return 0;
    }
  • 相关阅读:
    工行ATM转账——事务操作
    logstash VS splunk
    centos yum Segmentation fault 问题解决办法
    Disruptor-net 3.3.0
    ISOLAR-A 入门教程
    Arctic教程(2.1)—— AUTOSAR应用程序设计入门(接口)
    Arctic教程(二)—— AUTOSAR应用程序设计入门
    Arctic教程(一)—— 创建AUTOSAR工程
    Arctic 教程
    【转】查看你的AWS服务器已使用流量
  • 原文地址:https://www.cnblogs.com/moomcake/p/8734526.html
Copyright © 2020-2023  润新知