POJ2376 Cleaning Shifts(贪心)

来源:互联网 发布:火影忍者安卓数据 编辑:程序博客网 时间:2024/05/18 01:53

给出每头奶牛的覆盖区间,求最少几头奶牛可以覆盖[1,T]这个区间。(有个问题需要注意一下,比如T=10,1-5,6-10这就算全部覆盖了,覆盖的是点)

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define rep(i,n) for(int (i)=0;(i)<n;(i)++)using namespace std;struct Node{    int l,r;} cow[25010];bool cmp(Node a,Node b){    if(a.r==b.r) return a.l>b.l;    return a.r>b.r;}int main(){    //freopen("d:\\Test.txt","r",stdin);    int n,m;    scanf("%d%d",&n,&m);    rep(i,n) scanf("%d%d",&cow[i].l,&cow[i].r);    sort(cow,cow+n,cmp);    int ncount=1;    int j=0;    for(int i=0; i<n; i++)    {        if(cow[i].r<m) break;        j++;    }    if(j==0)    {        cout<<"-1"<<endl;        return 0;    }    int k=cow[j-1].l;    int L=k;    int i=j;    while(i<n)    {        bool flag=false;        if(cow[i].r<k-1) {cout<<"-1"<<endl;return 0;}        while(i<n&&cow[i].r>=k-1)        {            if(L>cow[i].l)            {                L=cow[i].l;                flag=true;            }            i++;        }        if(flag) ncount++;        k=L;        if(k==1) break;    }    if(k>1) cout<<"-1"<<endl;    else cout<<ncount<<endl;    return 0;}


0 0
原创粉丝点击