zoukankan      html  css  js  c++  java
  • poj3190

    一、题意:有n头牛,每头牛需要占用一个时间段的时间来挤奶,且必须有机器。问最少需要多少个机器

    二、思路:区间贪心。把尽量多的牛放在一个棚子里,这样就可以使得用到的棚子数最少。只要任意两头牛的挤奶时间不重合,就可以放在一个棚子里。因为N值比较大,先标记好每一头牛的起始坐标,然后按起始时间从小到大进行排序,然后依次从前往后去遍历每一头牛。这里需要用一个优先队列来维护,以结束时间从小到大来维护,每次将一头牛与队列首的牛进行比较,如果满足它的起始时间大于队列首的那头牛的结束时间,这两头牛就可以使用同一个机器,否则就新加一个机器。这里需要注意牛的入队和出队

    三、代码

    #include"iostream"
    #include"stdio.h"
    #include"queue"
    #include"algorithm"
    using namespace std;
    const int MAXN=50005;
    
    struct Node
    {
        int s,e,pos;
        friend bool operator<(Node a,Node b)
        {
            if(a.e==b.e) return a.s<b.s;
            return a.e>b.e;
        }
    };
    
    bool Cmp(Node a,Node b)
    {
        if(a.s!=b.s)
            return a.s<b.s;
        else
            return a.e<b.e;
    }
    
    Node cows[MAXN];
    priority_queue<Node>que;
    int order[MAXN];
    int main()
    {
        int n;
        while(scanf("%d",&n)==1)
        {
            for(int i=0;i<n;i++)
            {
                scanf("%d%d",&cows[i].s,&cows[i].e);
                cows[i].pos=i;
            }
            sort(cows,cows+n,Cmp);
            que.push(cows[0]);
            order[cows[0].pos]=1;
            for(int i=1;i<n;i++)
            {
                if(cows[i].s>que.top().e)
                {
                    order[cows[i].pos]=order[que.top().pos];
                    que.pop();
                    que.push(cows[i]);
                }
                else
                {
                    que.push(cows[i]);
                    order[cows[i].pos]=que.size();
                }
            }
            cout<<que.size()<<endl;
            for(int i=0;i<n;i++)
            {
                cout<<order[i]<<endl;
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    [saiku] 系统登录成功后查询Cubes
    216. Combination Sum III
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    211. Add and Search Word
    210. Course Schedule II
    分硬币问题
    开始学习Python
  • 原文地址:https://www.cnblogs.com/acm-jing/p/9795226.html
Copyright © 2011-2022 走看看