POJ 2376 Cleaning Shifts 区间贪心

来源:互联网 发布:霹雳知乎 编辑:程序博客网 时间:2024/06/10 08:57
#include<cstdio>#include<iostream>#include<vector>#include<map>#include<set>#include<queue>#include<algorithm>#include<string>#include<cstring>#include<cstdlib>#include<cctype>#include<sstream>#include<stack>#include<functional>using namespace std;typedef long long ll;typedef pair<int, int> P;const int INF=0x3f3f3f3f;const int MAX_N = 25005;P t[MAX_N];int N, T;int main(){#ifdef LOCALfreopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);#endif//ios::sync_with_stdio(false);cin >> N >> T;int ans = 0, last = 1;for(int i = 0; i < N; i++)scanf("%d %d",&t[i].first, &t[i].second);//按起始时间排序sort(t, t + N);int i = 0;//标记是否区间能覆盖到Tbool flag = false;while(i < N){        if(last < t[i].first)break;        int nlast = t[i].first;        //求出下一次选择的区间在满足条件的情况        //下能到达的最远区域        while(i < N && last >= t[i].first){            nlast = max(nlast, t[i].second);            i++;        }        //选择这个区域        ans++;        //下一次选择开始时间最晚为        //上一次选择的结束时间 + 1 在这里送了一次wa        last = nlast + 1;        //但是最后一次选择必须覆盖到T        if(last - 1>= T){            flag = true;            break;        }}if(flag == false)cout << -1 << endl;else cout << ans << endl;return 0;}

0 0
原创粉丝点击