UVA-10020 Minimal coverage(贪心)
题目大意:在x轴上,给一些区间,求出能把[0,m]完全覆盖的最少区间个数及该情形下的各个区间。
题目分析:简单的区间覆盖问题。可以按这样一种策略进行下去:在所有区间起点、长度有序的前提下,对于当前起点,找到可以覆盖下去的最长区间进行覆盖,并不断更新起点,直到覆盖完所有区间。
代码如下:
# include<iostream>
# include<cstdio>
# include<vector>
# include<cstring>
# include<algorithm>
using namespace std;
struct QuJian
{
int l,r;
QuJian(){}
QuJian(int _l,int _r):l(_l),r(_r){}
bool operator < (const QuJian &a) const {///先按起点位置,再按区间长短排序
if(l==a.l)
return r>a.r;
return l<a.l;
}
};
vector<QuJian>P,q;
void init()
{///扔掉无意义的区间(属于其他区间的区间)
sort(q.begin(),q.end());
vector<QuJian>::iterator it,it1;
for(it=q.begin();it!=q.end();++it){
it1=(++it),--it;
while(it1!=q.end()){
if(it1->l>=it->l&&it1->r<=it->r)
q.erase(it1);
else
break;
}
}
}
void solve(int &r,const int &m)
{
int len=q.size();
for(int i=0;i<len&&r<m;++i){///漏写“r<m”,导致WA了一上午。。。
if(q[i].l>r)///无法进行下去,覆盖失败
break;
if(i+1<len&&q[i+1].l<=r&&q[i+1].r>=q[i].r)///在区间可以覆盖的前提下,寻找长度最长的区间
continue;
r=q[i].r;
P.push_back(q[i]);
}
}
void print(int &r,const int &m)
{
if(r<m)
printf("0\n");
else{
printf("%d\n",P.size());
for(int i=0;i<P.size();++i)
printf("%d %d\n",P[i].l,P[i].r);
}
}
int main()
{
//freopen("UVA-10020 Minimal coverage.txt","r",stdin);
int T,m,a,b;
scanf("%d",&T);
while(T--)
{
q.clear();
P.clear();
scanf("%d",&m);
while(scanf("%d%d",&a,&b)&&(a+b))
{///选择有价值的区间
if(a>b)
swap(a,b);
if(a>m||b<0)
continue;
q.push_back(QuJian(a,b));
}
init();
int r=0;
solve(r,m);
print(r,m);
if(T)
printf("\n");
}
return 0;
}
UVA-10020 Minimal coverage(贪心)的更多相关文章
- UVA 10020 Minimal coverage(贪心 + 区间覆盖问题)
Minimal coverage The Problem Given several segments of line (int the X axis) with coordinates [Li, ...
- uva.10020 Minimal coverage(贪心)
10020 Given several segments of line (int the X axis) with coordinates [Li, Ri]. You are to choose t ...
- uva 10020 Minimal coverage 【贪心】+【区间全然覆盖】
Minimal coverage The Problem Given several segments of line (int the X axis) with coordinates [Li,Ri ...
- 【区间覆盖问题】uva 10020 - Minimal coverage
可以说是区间覆盖问题的例题... Note: 区间包含+排序扫描: 要求覆盖区间[s, t]; 1.把各区间按照Left从小到大排序,如果区间1的起点大于s,则无解(因为其他区间的左起点更大):否则选 ...
- UVa 10020 - Minimal coverage(区间覆盖并贪心)
Given several segments of line (int the X axis) with coordinates [Li, Ri]. You are to choose the min ...
- uva 10020 Minimal coverage
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- ural 1303 Minimal Coverage(贪心)
链接: http://acm.timus.ru/problem.aspx?space=1&num=1303 按照贪心的思想,每次找到覆盖要求区间左端点时,右端点最大的线段,然后把要求覆盖的区间 ...
- Minimal coverage (贪心,最小覆盖)
题目大意:先确定一个M, 然后输入多组线段的左端和右端的端点坐标,然后让你求出来在所给的线段中能够 把[0, M] 区域完全覆盖完的最少需要的线段数,并输出这些线段的左右端点坐标. 思路分析: 线段区 ...
- 贪心 URAL 1303 Minimal Coverage
题目传送门 /* 题意:最少需要多少条线段能覆盖[0, m]的长度 贪心:首先忽略被其他线段完全覆盖的线段,因为选取更长的更优 接着就是从p=0开始,以p点为标志,选取 (node[i].l < ...
- ural 1303 Minimal Coverage【贪心】
链接: http://acm.timus.ru/problem.aspx?space=1&num=1303 http://acm.hust.edu.cn/vjudge/contest/view ...
随机推荐
- c++第十七天
p101~p104: 1.数组中的元素个数也属于数组类型的一部分. 2.编译的时候数组的维度应该是已知的,也就是说维度必须是 const expression 3.const expression 是 ...
- c++ sleep(windows/linux)
c标准中包含了一个sleep用以实现当前线程暂停执行n毫秒,如下所示: 函数名: sleep 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); ...
- 20145302张薇 《网络对抗技术》 web安全基础实践
20145302张薇 <网络对抗技术> web安全基础实践 实验问题回答 1.SQL注入攻击原理,如何防御 原理:攻击者把SQL命令插入到网页的各种查询字符串处,达到欺骗服务器执行恶意的S ...
- 20145317彭垚 MSF基础应用
20145317彭垚 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode? exploit就相当于是载具,将真正要负责攻击的代码传送到靶机中,我觉得老师上课 ...
- 20145317《网络对抗》shellcode注入&Return-to-libc攻击深入
20145317<网络对抗>shellcode注入&Return-to-libc攻击深入 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻 ...
- Android 手机小闹钟
Android 手机小闹钟 一.这一篇主要使用系统为我们提供的一个服务AlarmManager来制作一个Android小闹钟,同时还涉及到了自定义主题.判断第一次启动应用.自定义动画.对话框.制作关闭 ...
- Python3基础 list reversed 列表逆转并输出
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- NS3 使用NS3工具PyViz
官方文档 跑了一个样例(first.py): 由于 NetAnim 对我实在是有点不友好,在 PyViz 和 NetAnim 之间,我倾向前者.后者需要生成.xml文件,相比前者较为麻烦. 安装过程: ...
- IIS Express 配置json minitype
IIS Express 配置json minitype 1.在命令窗口中cd到IIS Express安装目录,默认是“C:\Program Files\IIS Express”: 2.在IIS Exp ...
- 正则表达式及R字符串处理之终结版
http://yphuang.github.io/blog/2016/03/15/regular-expression-and-strings-processing-in-R/ 0.动机:为什么学习字 ...