【UVA - 10020 】Minimal coverage (贪心,区间覆盖问题)
题干:(Uva题不给题干了)
t组样例,每组首先给出一个M,然后给出一些线段(0 0结束),然后问怎么取能使得最少的线段覆盖区间[0, M]。
Sample Input
2
1
-1 0
-5 -3
2 5
0 0
1
-1 0
0 1
0 0
Sample Output
0
1
0 1
解题报告:
就是个贪心啊
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
struct Node {int st,ed;Node(){}Node(int st,int ed):st(st),ed(ed){}bool operator<(const Node & b) const{if(st != b.st) return st < b.st;return ed > b.ed;}
} node[MAX];
int tot,n,m,cnt,nb;
int ans[MAX];
int main()
{int t;int a,b,maxx,minn;cin>>t;while(t--) {tot=cnt=0;maxx = 0,minn = 0x3f3f3f3f;scanf("%d",&m);while(scanf("%d%d",&a,&b)) {if(a==0 && b==0) break;if(b<=0) continue;if(a>=m) continue;node[++tot] = Node(a,b);maxx = max(maxx,b);minn = min(minn,a);}sort(node+1,node+tot+1);int cure,curs;curs=cure=0;
// if(minn >= m || maxx <= 0) {
// puts("0");
// if(t) puts("");
// continue;
// }int flag = 0;for(int i = 1; i<=tot; ) {if(node[i].st > curs) {break; }while(i<=tot && node[i].st<=curs) {if(node[i].ed > cure) {cure = node[i].ed;nb = i;}i++;}//if(i!=tot) i--;ans[++cnt] = nb;curs = cure;if(curs >= m) {flag=1;break;}}if(flag == 0) puts("0");else {printf("%d\n",cnt);for(int i = 1; i<=cnt; i++) printf("%d %d\n",node[ans[i]].st,node[ans[i]].ed);}if(t) puts("");}return 0 ;}
总结: 那两句读数据的时候的if去掉好像也可以AC,,反正注释掉的那一部分加上也可以AC。。
【UVA - 10020 】Minimal coverage (贪心,区间覆盖问题)相关推荐
- UVA 10020 Minimal coverage
大意:数轴上有n个闭区间[ai,bi],选择尽量少的区间覆盖一条指定的线段[s,t]. 思路:贪心,具体见刘汝佳白书P154.把各区间按照a从小到大排序.如果区间1的起点不是s,无解,否则选择起点在s ...
- 高效算法——E - 贪心-- 区间覆盖
E - 贪心-- 区间覆盖 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/E 解题思路: 贪心思想, ...
- 贪心 区间覆盖最小值
贪心 区间覆盖最小值 POJ 2376 大概题意: 从1到T区间内,必须保证每个点都有牛在工作,给出每头牛的工作时间,求需用到的最小的牛的数量,无解输出-1 一开始以为组合[1,4] [5,T]不算覆 ...
- 10382 - Watering Grass(贪心 区间覆盖问题)洒水面覆盖
double qiuzhi(int id) {double t1=cc[id].rid*cc[id].rid;double t2=w*w/4;double t3=t1-t2;double t4=sqr ...
- 贪心---区间覆盖问题(水题)
区间覆盖问题 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 设x1 , x2 ,-- , xn 是实直线上的n 个点. ...
- Minimal coverage (贪心,最小覆盖)
题目大意:先确定一个M, 然后输入多组线段的左端和右端的端点坐标,然后让你求出来在所给的线段中能够 把[0, M] 区域完全覆盖完的最少需要的线段数,并输出这些线段的左右端点坐标. 思路分析: 线段区 ...
- UVa 10020 (最小区间覆盖) Minimal coverage
题意: 数轴上有n个闭区间[ai, bi],选择尽量少的区间覆盖一条指定线段[0, m] 算法: [start, end]为已经覆盖到的区间 这是一道贪心 把各个区间先按照左端点从小到大排序,更新st ...
- *【UVA - 10382】Watering Grass(贪心,区间覆盖问题,思维)
题干: 题目大意: 有一块草坪,长为l,宽为w,在它的水平中心线上有n个位置可以安装喷水装置,各个位置上的喷水装置的覆盖范围为以它们自己的半径ri为圆.求出最少需要的喷水装置个数,如果无论如何都不能覆 ...
- 区间覆盖全部类型及部分精选习题汇总详解(贪心策略)
内容如下: 1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2, ...
- 三类基于贪心思想的区间覆盖问题
一.区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖. 样例:一个长度为8的区间,可选的线段有[2,6], ...
最新文章
- REDHAT6.4桌面环境添加快捷建打开命令行终端
- Java IO: System.in, System.out, System.err
- 机器学习中常见的过拟合解决方法
- Python正在勒死R吗?
- Android studio libs目录
- Spring及SpringBoot @Async配置步骤及注意事项
- 和一个刚毕业不久的朋友聊天
- Windows 64 位 mysql 5.7.20 安装教程
- myeclipse copy问题
- 装饰模式(Decorate Pattern)
- word文件批量转换为txt文档
- java中tab键_Java 9中的JShell中Tab键的用途是什么?
- 期刊检索级别简单介绍
- BBR: Congestion-based congestion control
- B站视频最新下载方法
- TypeError: _typeof4 is not a function,解决微信小程序报错
- iphone 代码片段2
- 贝壳找房户外拓展(中等) 扫描线
- 如何做好地质旅游景区的策划规划和投资开发?
- Git 使用cherry-pick摘取提交
热门文章
- [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]
- [剑指offer]面试题第[42]题[Leedcode][JAVA][第53题][最大子序和][动态规划][贪心][分治]
- [剑指offer]面试题第[7]题[JAVA][斐波那契数列][递归]
- HDU - 4586 数学期望
- python爬虫数据可视化_python 爬虫与数据可视化--python基础知识
- 电脑二维码怎么扫描_扫描模组方案是如何满足多种应用场景需求?
- B. File List
- ddns客户端_DDNS哪家最方便?试试看Mikrotik的ROS!
- 中职计算机说课稿三篇,精选中职计算机说课稿三篇-20210609060707.docx-原创力文档...
- linux中线程的挂起与恢复(进程暂停)