poj 2376 清洗的转变 set实现 (程序设计竞赛题集)

来源:互联网 发布:中国海外代购网站 知乎 编辑:程序博客网 时间:2024/05/17 02:30

时间限制: 1000MS 内存限制: 65536 K共提交: 24198 接受: 6056

描述

农夫约翰分配一些他 N (1 < = N < = 25,000) 牛要做一些清洁家务的谷仓。他总是想要一只奶牛,工作的东西清理,已将一天分为 T 的变化 (1 < = T < = 1,000,000),第一次被转移 1 和最后一次是转移 T.

每头奶牛只是在一定间隔时间为白天可用 在清洗工作。为清洁责任选择任何牛将为她的间隔的全部工作。

你的工作是帮助农民约翰分配一些奶牛转向,(i) 每个班次有至少一只奶牛,分配给它的以及 (ii) 尽可能的几头牛正在参与清洗。如果它是不可能分配给每个班次的一头母牛,打印-1。

输入

* 第 1 行: 两个空格分隔整数: N 和 T

* 线 2..N + 1: 每一行都包含其间牛可以工作的时间间隔的开始和结束时间。一头母牛开始工作,开始时间和结束时间后结束。

输出

* 第 1 行: 牛农夫约翰需要雇用或-1,如果它是不可能将分配给每个班次的牛最小数目。

示例输入

3 101 73 66 10

示例输出

2

提示

这个问题具有巨大的输入的数据,使用 scanf() 而不是 cin 来读取数据,以避免时间限制超过。

输入详细信息:

有 3 头牛和 10 班。牛 #1 可以轮班 1..7、 牛 #2 可以轮班 3..6,和牛 #3 可以轮班 6..10。

输出详细信息:

通过选择牛 #1 和 #3,覆盖所有的班次。有是没有办法来弥补用少于 2 头奶牛的所有班次。





#include <iostream>#include <cstdio>#include <set>#include <algorithm>using namespace std;typedef pair<int, int> P;struct cmp {    bool operator()(const P& a, const P& b)const {        return a.first < b.first;    }};typedef set<P, cmp> S;int n, t;S s;int  input(){    scanf("%d%d", &n, &t);    s.clear();    int i, b, e;    S::iterator it;    for (i = 0; i < n; i ++) {        scanf("%d%d", &b, &e);        it = s.find(P(b, e));cout<<(*it).second<<endl;        return 0;        if (it == s.end())            s.insert(P(b, e));        else if ((*it).second < e) {            s.erase(it);            s.insert(P(b, e));        }    }    //for (it = s.begin(); it != s.end(); it ++)    //  cout << (*it).first << " " << (*it).second << endl;}int solve(){    int res = 0;    int begin = 1;    S::iterator it, it1;    while (s.size()) {        int end = 0;        for (it = s.begin(); it != s.end() && (*it).first <= begin; it ++) {            if ((*it).second > end) {                end = (*it).second;                it1 = it;            }        }        if (end == 0) return -1;        s.erase(it1);        begin = end + 1;        //printf("begin=%d\n", begin);        res ++;        if (begin > t)            return res;    }    return -1;}int main(void){    input();    //printf("%d\n", solve());    return 0;}