刷题——Cleaning Shifts POJ

来源:互联网 发布:淘宝网天猫运动鞋 编辑:程序博客网 时间:2024/06/01 08:48
/*
给你n个区间,区间总长为T从1开始
问最少选几个区间可以把T区间全部覆盖
ed从0开始,每次选取e.st<=ed+1的情况下,e.ed的最大值
*/
#include <stdio.h>
#include <algorithm>
using namespace std;
struct node{int st,ed;};
bool cmp(node a,node b){
    return a.st<b.st;
}
node e[25010];
int n,m;
void solve(){
    int ed=0,num=0,index=0;
    while(ed<m){
        int d=ed;
        for(int i=index;i<n;i++){
            if(e[i].st<=ed+1){
                d=max(d,e[i].ed);
            }
            else{
                index=i;
                break;
            }
        }
        if(d==ed)break;
        num++;
        ed=d;
    }
    if(ed>=m)printf("%d\n",num);
    else printf("-1\n");
}
int main(){
    while(~scanf("%d %d",&n,&m)){
        for(int i=0;i<n;i++){
            scanf("%d %d",&e[i].st,&e[i].ed);
        }
        sort(e,e+n,cmp);
        solve();
    }
    return 0;
}
原创粉丝点击