UVa 10020 (最小区间覆盖) Minimal coverage
题意:
数轴上有n个闭区间[ai, bi],选择尽量少的区间覆盖一条指定线段[0, m]
算法:
[start, end]为已经覆盖到的区间
这是一道贪心
把各个区间先按照左端点从小到大排序,更新start为end,如果区间1在start的右端,则无解,因为其他区间更不可能覆盖到
然后在剩下的能覆盖到start的区间里面选择能覆盖到最右端的区间并更新end,然后记录在path里面。如果end的已经将m覆盖则退出循环
如果遍历完所有的区间后end依然没能覆盖到start,则无解
最后按照parh里面记录的路径输出区间即可
//#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = + ; struct Range
{
int a, b;
inline bool operator< (const Range& rhs) const
{
return a < rhs.a || (a == rhs.a && b < rhs.b);
}
}ranges[maxn];
int path[maxn]; int main(void)
{
#ifdef LOCAL
freopen("10020in.txt", "r", stdin);
#endif int T;
scanf("%d", &T);
while(T--)
{
int a, b, m, n = ;
scanf("%d", &m);
while(scanf("%d%d", &a, &b) == )
{
if(a == && b == ) break;
if(a > m) continue;
if(a < ) a = ;
ranges[n].a = a;
ranges[n++].b = b;
}
sort(ranges, ranges + n);
int minCover = ;
int start = , end = ;
for(int i = ; i < n; )
{
start = end;
if(ranges[i].a > start)
break;
while(i < n && ranges[i].a <= start)
{
if(ranges[i].b > end)
{
end = ranges[i].b;
path[minCover] = i;
}
++i;
}
++minCover;
if(end >= m) break;
}
if(end < m) minCover = ;
printf("%d\n", minCover);
for(int i = ; i < minCover; ++i)
printf("%d %d\n", ranges[path[i]].a, ranges[path[i]].b);
if(T)
printf("\n");
}
return ;
}
代码君
UVa 10020 (最小区间覆盖) Minimal coverage的更多相关文章
- UVA10020:Minimal coverage(最小区间覆盖)
题目: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68990#problem/M 题目需求:数轴上有n个闭区间[ai,bi],选择尽量 ...
- SAM I AM UVA - 11419 最小点集覆盖 要输出具体覆盖的行和列。
/** 题目:SAM I AM UVA - 11419 链接:https://vjudge.net/problem/UVA-11419 题意:给定n*n的矩阵,'X'表示障碍物,'.'表示空格;你有一 ...
- UVA10020(最小区间覆盖)
题意: 给你一个区间[0,m]和一些小的区间[l,r]让你选择最少的小区间个数去把整个区间覆盖起来. 思路: 算是比较经典的贪心题目吧(经典于难度没什么对应关系),大体思路可以 ...
- POJ - 2376 Cleaning Shifts 贪心(最小区间覆盖)
Cleaning Shifts Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some clea ...
- poj 2376 Cleaning Shifts 最小区间覆盖
Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 40751 Accepted: 9871 ...
- E. Third-Party Software - 2 贪心----最小区间覆盖
E. Third-Party Software - 2 time limit per test 2.0 s memory limit per test 256 MB input standard in ...
- 【区间覆盖问题】uva 10020 - Minimal coverage
可以说是区间覆盖问题的例题... Note: 区间包含+排序扫描: 要求覆盖区间[s, t]; 1.把各区间按照Left从小到大排序,如果区间1的起点大于s,则无解(因为其他区间的左起点更大):否则选 ...
- UVA 10020 Minimal coverage(贪心 + 区间覆盖问题)
Minimal coverage The Problem Given several segments of line (int the X axis) with coordinates [Li, ...
- uva 10020 Minimal coverage 【贪心】+【区间全然覆盖】
Minimal coverage The Problem Given several segments of line (int the X axis) with coordinates [Li,Ri ...
随机推荐
- Unix环境链接静态库
静态库 请点评 有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库,我们在不同的程序中都会用到libc中的库函数(例如printf),也会用到libc中的变量(例 ...
- jxl.dll操作总结
1)Jxl是一个开源的Java Excel API项目,通过Jxl,Java可以很方便的操作微软的Excel文档.除了Jxl之外,还有Apache的一个POI项目,也可以操作Excel,两者相比之下: ...
- Android中如何查看内存(上)
文章参照自:http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-a ...
- SQL技术内幕-6 rank()over(order by XX COLLATE) 的用法
DECLARE @Names TABLE ( name VARCHAR(20) ); INSERT INTO @Names VALUES ('DeSzmetch'),('DESZMETCH'),('D ...
- C# 给数据库传入当前时间
DateTime time=DateTime.Now; // 存储过程中用一个 @addTime DateTime --接收DateTime 类型接收
- ExtJs之Ext.util.TextMetrics
<!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...
- JavaScript基于对象编程
js面向对象特征介绍 javascript是一种面向(基于)对象的动态脚本语言,是一种基于对象(Object)和事件驱动(EventDirven)并具有安全性能的脚本语言.它具有面向对象语言所特有的各 ...
- 项目中遇到的 linq datatable select
1如何使用DataTable.Select选出来的Rows生成新的DataTable?DataTable dt = 数据源;DataTable dtt = new DataTable();dtt=dt ...
- 李洪强iOS开发之添加手势
李洪强iOS开发之添加手势 02 - 添加手势
- 安卓Intent.ACTION_TIME_TICK 广播
Intent.ACTION_TIME_TICK 广播需要动态注册,不能在清单文件配置. TimeReceiver mBroadcastReceiver = new TimeReceiver(); In ...