zoukankan      html  css  js  c++  java
  • poj2376

    一、题意:有n头牛,它们都有一个工作时间的区间s至e,给定一个总的工作时间t,问最少需要多少头牛才能覆盖从1到t的工作时间

    二、思路:简单的区间贪心。首先将牛的工作时间按起始时间最小(第一优先级)、结束时间最大的顺序(第二优先级)进行排序,然后取第n头牛时,要满足一下条件:1、第n头牛的s要小于等于第n-1头牛的e+1(这里要注意题目里给的是时间点,不是区间段)  2、第n头牛的e尽可能的大。之后就得考虑一些特例情况就可以了。

    三、代码:

    #include"iostream"
    #include"stdio.h"
    #include"algorithm"
    using namespace std;
    
    const int MAXN=25005;
    int n,t;
    
    struct node
    {
        int s,e;
    };
    node cows[MAXN];
    
    bool Cmp(const node a,const node b)
    {
        if(a.s!=b.s) return a.s<b.s;
        else return a.e>=b.e;
    }
    
    int Cal(int ans)
    {
        if(n<1||cows[0].s!=1) return -1;
        if(n==1)
        {
            if(cows[0].s==1&&cows[0].e==t) return 1;
            else return -1;
        }
        int i=1,maxE=cows[0].e,maxNextE=cows[0].e;
        while(i<n)
        {
            if(maxE==t) return ans;
            bool flag=false;
            if(cows[i].s<=maxE+1){
                while(i<n&&cows[i].s<=maxE+1)
                {
                    if(cows[i].e>maxNextE)
                    {
                        maxNextE=cows[i].e;
                        flag=true;
                    }
                    i++;
                }
                if(flag)
                {
                    maxE=maxNextE;
                    ans++;
                }
            }
            else
                return -1;
        }
        if(maxE==t) return ans;
        else return -1;
    }
    
    int main()
    {
        while(scanf("%d%d",&n,&t)==2)
        {
            for(int i=0;i<n;i++)
                scanf("%d%d",&cows[i].s,&cows[i].e);
            sort(cows,cows+n,Cmp);
            cout<<Cal(1)<<endl;
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    造轮子杂记2
    Net分布式系统之五:微服务架构
    C#设计模式:责任链模式
    NET Core1.0之CentOS平台开发控制台程序DEMO
    WCF Routing 服务
    设计模式之外观模式
    设计模式之简单工厂模式
    Eclipse快捷键总结
    Spring容器的初始化流程
    IOC容器的创建
  • 原文地址:https://www.cnblogs.com/acm-jing/p/9630588.html
Copyright © 2011-2022 走看看