POJ1716 Integer Intervals(区间选点)
来源:互联网 发布:国外网络支付平台 编辑:程序博客网 时间:2024/06/05 19:43
题意:找出最小的集合,使他满足给定的各个区间内至少有两个点被包括。
思路:和之前做过的那道雷达站问题非常类似,区间选点,不过每个区间要有两个点,而且区间是离散的为整数。回忆一下之前的区间选点,是拿区间的右端点作为标记与后面的区间进行比较,也就是可以认为每次选的点都是右端点。在这里由于要选两个点,自然可以想到可以取区间倒数两个点作为标记。
每次比较时分情况讨论:①两标记点均在区间内,无需变化。
②有一点在,一个不在,说明需在当前区间内再取一个点,自然是取右端点,更新两标记点。
③都不在,说明需在当前区间内取两个点,取倒数两个点,更新两标记点。
代码:
#include <iostream>#include <fstream>#include <algorithm>using namespace std;struct node {int l, r;}nodes[10010];bool cmp(node a, node b){return a.r < b.r || (a.r == b.r&&a.l < b.l);}int main(){//fstream cin("test.txt");int n;cin >> n;for (int i = 0; i < n; i++){cin >> nodes[i].l >> nodes[i].r;}sort(nodes, nodes + n, cmp);int ans = 2;int tmp1 = nodes[0].r - 1;int tmp2 = nodes[0].r;for (int i = 1; i < n; i++){if (tmp1 >= nodes[i].l)continue;else{if (tmp2 >= nodes[i].l){ans++;tmp1 = tmp2;tmp2 = nodes[i].r;}else{ans += 2;tmp1 = nodes[i].r - 1;tmp2 = nodes[i].r;}}}cout << ans << endl;//system("pause");return 0;}
阅读全文
0 0
- POJ1716 Integer Intervals(区间选点)
- POJ1716 G - Integer Intervals(区间选点)
- Integer Intervals(区间选点)
- POJ1716-Integer Intervals(区间约束)
- poj1716 Integer Intervals
- poj1716 Integer Intervals
- poj1716 - Integer Intervals
- poj1716 Integer Intervals
- POJ1716 Integer Intervals
- poj1716 Integer Intervals 贪心
- 【poj1716】 Integer Intervals
- poj1716 Integer Intervals
- poj1716 Integer Intervals(贪心)
- poj1716 Integer Intervals(贪心)
- poj1716 Integer Intervals (差分约束)
- poj1716 Integer Intervals(差分约束)
- poj1716 Integer Intervals 差分约束
- [POJ 1201] Intervals (区间贪心选点)
- spark sql加载parquet格式和json格式数据
- 十大无人机品牌介绍
- 环境搭建
- background-clip使用
- ReactNative ScollView 组件
- POJ1716 Integer Intervals(区间选点)
- [sicily]1000. 函数求值
- Myeclipse如何自动创建hibernate以及配置struts2以及数据库表创建映射文件 详解
- Module build failed: TypeError: this._init is not a function
- 最简单的基于FFMPEG的封装格式转换器(无编解码)
- 确定字符串第二个大写字母的位置并分拆
- Maven构建Spring Boot+Mybatis+derby的配置
- NotePad++访问linux文件
- 解除ServiceStack.Text免费配额限制