• POJ 3190 Stall Reservations【贪心】


    POJ 3190

    题意:

    一些奶牛要在指定的时间内挤牛奶,而一个机器只能同时对一个奶牛工作。给你每头奶牛的指定时间的区间(闭区间),问你最小需要多少机器。
    思路:
    先按奶牛要求的时间起始点进行从小到大排序,然后维护一个优先队列,里面以已经开始挤奶的奶牛的结束时间早为优先。然后每次只需要检查当前是否有奶牛的挤奶工作已经完成的机器即可,若有,则换那台机器进行工作。若没有,则加一台新的机器。
    注意:利用priority_queue<Node,vector<Node>,less<Node>>qe;这个定义后可以将元素从大到小插入元素,但是注意的是结构体中必须重载<操作符,不然会出错,如果不是结构体而是int类型则不用重载

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    using namespace std;
    const int maxn=60000;
    int n,use[maxn];
    struct Node
    {
        int l;
        int r;
        int pos;//原顺序输出
        //注优先队列的重载<与sort的重载<结论相反,优先级大的先输出
        bool operator <(const Node &a)const
        {
            if(r==a.r)
                return l>a.l;
            return r>a.r;
        }
    }a[maxn];
    priority_queue<Node> q;
    bool cmp(Node a,Node b)
    {
        if(a.l==b.l)
            return a.r<b.r;
        return a.l<b.l;
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=0;i<n;i++)
            {
                scanf("%d%d",&a[i].l,&a[i].r);
                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().r<a[i].l)
                {
                    use[a[i].pos]=use[q.top().pos];
                    q.pop();
                }
                else
                {
                    ans++;
                    use[a[i].pos]=ans;
                }
                q.push(a[i]);
            }
            printf("%d
    ",ans);
            for(int i=0;i<n;i++)  
                printf("%d
    ",use[i]);  
            while(!q.empty())  
                q.pop();  
        }  
        return 0;  
    }
  • 相关阅读:
    jenkins1—docker快速搭建jenkins环境
    UPC-6616 Small Multiple(BFS广搜&双向队列)
    UPC-5502 打地鼠游戏(贪心&优先队列)
    UPC-5500 经营与开发(贪心&逆推)
    NBUT
    UPC-6690 Transit Tree Path(树上最短路径SPFA)
    UPC-6359 售票(字典树)
    UPC-6358 庭师的利刃(两数与运算最大值)
    HDU-6308 Time Zone(时区转换)
    欧拉函数模板及拓展
  • 原文地址:https://www.cnblogs.com/demian/p/6560860.html
Copyright © 2020-2023  润新知