• Stall Reservations POJ


    Stall Reservations
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 11002   Accepted: 3886   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:
    • 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.

    Source

     
    题意:人去挤奶牛,一个人挤一头,输出最少几人及牛奶并且哪只牛哪个人
    题解:贪心加优先队列,将开始时间在前面的排在前面,开始时间一样的就把结束时间后的排在后面
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<sstream>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<map>
    #include<set>
    using namespace std;
    #define INF 0x3f3f3f3f
    const int maxn=60000;
    int n,use[maxn];
    
    struct node
    {
        int st;
        int en;
        int pos;
        bool operator < (const node &a)const
        {
            if(en==a.en)
                return st>a.st;
            return en>a.en;
        }
    }a[maxn];
    priority_queue<node>q;
    bool cmp(node a,node b)
    {
        if(a.st==b.st)
            return a.en<b.en;     //排序,按照开始时间排序,开始时间相同的结束时间迟的排后面
        return a.st<b.st;
    }
    
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=0;i<n;i++)
            {
                scanf("%d %d",&a[i].st,&a[i].en);
                a[i].pos=i;
            }
            sort(a,a+n,cmp);
            q.push(a[0]);
            int ans=1;
            use[a[0].pos]=1;
            for(int i=1;i<n;i++)
            {
                if(!q.empty() && q.top().en < a[i].st)
                {
                    use[a[i].pos]=use[q.top().pos];
                    q.pop();
                }
                else
                {
                    ans++;
                    use[a[i].pos]=ans;
                }
                q.push(a[i]);
            }
            cout<<ans<<endl;
            for(int i=0;i<n;i++)
                cout<<use[i]<<endl;
            while(!q.empty())
                q.pop();
        }
        return 0;
    }
  • 相关阅读:
    leetcode 29-> Divide Two Integers without using multiplication, division and mod operator
    ros topic 发布一次可能会接收不到数据
    python中的print()、str()和repr()的区别
    python 部分函数
    uiautomatorviewer错误 unable toconnect to adb
    pyqt 不规则形状窗口显示
    appium 计算器demo
    Spring 3.0 注解注入详解
    Spring Autowire自动装配
    restful 学习地址
  • 原文地址:https://www.cnblogs.com/smallhester/p/9499874.html
Copyright © 2020-2023  润新知