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。
每头奶牛只是在一定间隔时间为白天可用 在清洗工作。为清洁责任选择任何牛将为她的间隔的全部工作。
你的工作是帮助农民约翰分配一些奶牛转向,(i) 每个班次有至少一只奶牛,分配给它的以及 (ii) 尽可能的几头牛正在参与清洗。如果它是不可能分配给每个班次的一头母牛,打印-1。
输入
* 第 1 行: 两个空格分隔整数: N 和 T
* 线 2..N + 1: 每一行都包含其间牛可以工作的时间间隔的开始和结束时间。一头母牛开始工作,开始时间和结束时间后结束。
* 线 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 头奶牛的所有班次。
输入详细信息:
有 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;}
阅读全文
0 0
- poj 2376 清洗的转变 set实现 (程序设计竞赛题集)
- 程序设计竞赛题集
- 程序设计思路的转变
- 实现用指定量的砝码来完成称重 竞赛题(递归法)
- 用C多线程实现当年微软的竞赛题
- POJ-3481(set的应用)
- POJ-3588(Set的应用)
- 排列组合的一个竞赛题
- 设计模式-工厂模式(手工作坊到工业化的转变 c#实现)
- 设计模式-工厂模式(手工作坊到工业化的转变 c#实现)
- 设计模式-工厂模式(手工作坊到工业化的转变 c#实现)
- 角色转变注意的问题(一)
- 角色转变注意的问题(二)
- 字符串实现转变
- 实现COM组件向Web Services的转变
- 实现COM组件向Web Services的转变
- 实现COM组件向Web Services的转变
- 实现COM组件向Web Services的转变
- JSONObject解析Boolean类型出现异常
- 线程,进程,协程
- html与js加载顺序
- bootStap支treeViewjs
- LeetCode 643. Maximum Average Subarray I
- poj 2376 清洗的转变 set实现 (程序设计竞赛题集)
- Hbase与Hive的区别与联系 (总结3)
- 001、java基础语法
- Android样式的开发:selector篇
- Java 封装
- A表中的数据更新到B表SQL语法-update set from where
- js传参是按值传递还是按引用传递?
- Linux netstat命令详解
- POJ 1087 A Plug for UNIX (网络流, Dinic 建图)