时间限制: 1000MS | 内存限制: 65536 K | |
共提交: 24198 | 接受: 6056 |
描述
农夫约翰分配一些他 N (1 < = N < = 25,000) 牛要做一些清洁家务的谷仓。他总是想要一只奶牛,工作的东西清理,已将一天分为 T 的变化 (1 < = T < = 1,000,000),第一次被转移 1 和最后一次是转移 T.
每头奶牛只是在一定间隔时间为白天可用 在清洗工作。为清洁责任选择任何牛将为她的间隔的全部工作。
你的工作是帮助农民约翰分配一些奶牛转向,(i) 每个班次有至少一只奶牛,分配给它的以及 (ii) 尽可能的几头牛正在参与清洗。如果它是不可能分配给每个班次的一头母牛,打印-1。
每头奶牛只是在一定间隔时间为白天可用 在清洗工作。为清洁责任选择任何牛将为她的间隔的全部工作。
你的工作是帮助农民约翰分配一些奶牛转向,(i) 每个班次有至少一只奶牛,分配给它的以及 (ii) 尽可能的几头牛正在参与清洗。如果它是不可能分配给每个班次的一头母牛,打印-1。
输入
* 第 1 行: 两个空格分隔整数: N 和 T
* 线 2..N + 1: 每一行都包含其间牛可以工作的时间间隔的开始和结束时间。一头母牛开始工作,开始时间和结束时间后结束。
* 线 2..N + 1: 每一行都包含其间牛可以工作的时间间隔的开始和结束时间。一头母牛开始工作,开始时间和结束时间后结束。
输出
* 第 1 行: 牛农夫约翰需要雇用或-1,如果它是不可能将分配给每个班次的牛最小数目。
示例输入
3 10 1 7 3 6 6 10
示例输出
2
提示
这个问题具有巨大的输入的数据,使用 scanf() 而不是 cin 来读取数据,以避免时间限制超过。
输入详细信息:
有 3 头牛和 10 班。牛 #1 可以轮班 1..7、 牛 #2 可以轮班 3..6,和牛 #3 可以轮班 6..10。
输出详细信息:
通过选择牛 #1 和 #3,覆盖所有的班次。有是没有办法来弥补用少于 2 头奶牛的所有班次。
输入详细信息:
有 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;
}