题意:

数轴上有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的更多相关文章

  1. UVA10020:Minimal coverage(最小区间覆盖)

    题目: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68990#problem/M 题目需求:数轴上有n个闭区间[ai,bi],选择尽量 ...

  2. SAM I AM UVA - 11419 最小点集覆盖 要输出具体覆盖的行和列。

    /** 题目:SAM I AM UVA - 11419 链接:https://vjudge.net/problem/UVA-11419 题意:给定n*n的矩阵,'X'表示障碍物,'.'表示空格;你有一 ...

  3. UVA10020(最小区间覆盖)

    题意:       给你一个区间[0,m]和一些小的区间[l,r]让你选择最少的小区间个数去把整个区间覆盖起来. 思路:       算是比较经典的贪心题目吧(经典于难度没什么对应关系),大体思路可以 ...

  4. POJ - 2376 Cleaning Shifts 贪心(最小区间覆盖)

    Cleaning Shifts Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some clea ...

  5. poj 2376 Cleaning Shifts 最小区间覆盖

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 40751   Accepted: 9871 ...

  6. 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 ...

  7. 【区间覆盖问题】uva 10020 - Minimal coverage

    可以说是区间覆盖问题的例题... Note: 区间包含+排序扫描: 要求覆盖区间[s, t]; 1.把各区间按照Left从小到大排序,如果区间1的起点大于s,则无解(因为其他区间的左起点更大):否则选 ...

  8. UVA 10020 Minimal coverage(贪心 + 区间覆盖问题)

     Minimal coverage  The Problem Given several segments of line (int the X axis) with coordinates [Li, ...

  9. uva 10020 Minimal coverage 【贪心】+【区间全然覆盖】

    Minimal coverage The Problem Given several segments of line (int the X axis) with coordinates [Li,Ri ...

随机推荐

  1. win7修改hosts文件方法

    因权限的关系,导致无法修改,解决如下: hosts属性 --> 安全 --> 编辑权限 --> 完全控制,就可以修改该文件了.win7默认不能修改hosts文件.

  2. BZOJ2435: [Noi2011]道路修建

    这种水题真是……没一次AC都不好意思见人啊 P.S. LINUX无限栈真是爽炸了… 我爱递归 /**************************************************** ...

  3. POJ 2226

    Muddy Fields Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7557   Accepted: 2791 Desc ...

  4. mysql 中的bool值

    boolean在MySQL里的类型为tinyint(1) 很奇怪.

  5. IIS 发布程序的一些心得

    1.应用程序池一般自己建立对应Framework版本的程序池,并托管管道模式为经典 2.在IIS根目录双击,右侧的“ISAPI和CGI限制” 双击打开,将自己所需要的Framework版本的限制设置为 ...

  6. 饶有兴致的用javascript做了个贪食蛇游戏

    09年写的东西.一直藏在自己的记事本里头,现在开始整理写博客,所以直接搬过来 先上效果图 再添代码: <HTML> <HEAD> <TITLE>贪吃蛇 Snake ...

  7. ExtJs之Ext.util.CSS

    <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...

  8. JDBC第四次学习

    传智播客李勇老师的JDBC系列学习终于接近尾声了,好开心,能学到这么多的东西,还不赶快记录下来,留待以后回味! 如何使用开源项目DBCP(实际项目中常用)    主要分为三个步骤: 使用DBCP必须用 ...

  9. eclipse工程设置的问题

  10. Spring框架学习之第2节

    传统的方法和使用spring的方法 使用spring,没有new对象,我们把创建对象的任务交给了spring的框架,通过配置用时get一下就行. 项目结构 applicationContext.xml ...