P2684 搞清洁

给定一段区间及若干个线段, 求使区间被完全覆盖所需的最少线段数


错误日志: 菜


Solution

补一下贪心吧

这题最小线段覆盖

首先按照左端点排序

现在对于所有左区间到达目前已覆盖位置, 按照贪心我们选取右区间最右的那个

然后更新即可

注意: 最后还要做一个判断

现在再用最后一个区间, 还不能够到区间右端点, 则无解

若当前已覆盖位置已经大于区间最右, 那么现选取的区间已经完全覆盖了区间

若当前已覆盖位置还未到达区间最右, 前面已经判断过有解, 所以要用上最后一个区间, 答案加一

Code

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
#define LL long long
#define REP(i, x, y) for(int i = (x);i <= (y);i++)
using namespace std;
int RD(){
int out = 0,flag = 1;char c = getchar();
while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
return flag * out;
}
const int maxn = 50019;
int num, T;
struct Node{int l, r;}I[maxn];
bool cmp(Node a, Node b){return a.l < b.l;}
int main(){
num = RD(), T = RD();
REP(i, 1, num){
I[i].l = RD() - 1;//转换为相交
I[i].r = RD();
}
sort(I + 1, I + 1 + num, cmp);
int ans = 0, now = 0, next = 0;//next记录当前末尾最长延续
REP(i, 1, num){
if(I[i].l <= now)next = max(next, I[i].r);//续上
else{
ans++;
now = next;
if(I[i].l > now){puts("-1");return 0;}
next = max(next, I[i].r);//注意新选的区间也要更新最右值
}
}
if(next < T){puts("-1");return 0;}//后面的 next >= T
if(now < T)printf("%d\n", ans + 1);//选上最后一个区间
else printf("%d\n", ans);//已经满足要求
return 0;
}

P2684 搞清洁的更多相关文章

  1. 洛谷 P2684 搞清洁

    P2684 搞清洁 题目描述 FJ准备分配它的N只奶牛(1 <= N <= 25,000) 做清洁工作,他把一天分成T(1 <= T <= 1,000,000)个时间段,他希望 ...

  2. java:装饰者模式,节点流和处理流

    接口: interface Worker { public void dowork(); } 清洁工:被装饰者,节点流 class Clean implements Worker { public v ...

  3. Makefile 如何轻松搞定

    最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...

  4. 搞个这样的APP要多久?

    这是一个“如有雷同,纯属巧合”的故事,外加一些废话,大家请勿对号入座.开始了…… 我有些尴尬地拿着水杯,正对面坐着来访的王总,他是在别处打拼的人,这几年据说收获颇丰,见移动互联网如火如荼,自然也想着要 ...

  5. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  6. 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

    前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...

  7. 彻底搞懂Javascript的“==”

    本文转载自:@manxisuo的<通过一张简单的图,让你彻底地.永久地搞懂JS的==运算>. 大家知道,==是JavaScript中比较复杂的一个运算符.它的运算规则奇怪,容让人犯错,从而 ...

  8. 在 Linux 中使用搜狗拼音输入法以及搞定 Flash 和支付宝

    在 Ubuntu 中安装搜狗输入法 在 Ubuntu Kylin 系统中,默认安装搜狗拼音输入法,但是在原生 Ubuntu 系统中则不是.这可以理解,毕竟搜狗输入法的 Linux 版有 Kylin 团 ...

  9. 不要听吹牛逼什么前端MVVM框架就是好,其实都是一帮没学好分层设计的搞出来的,让你彻底看清前端MVVM的本质

    最近前端圈子里面,发现大家都在热炒概念,什么knockout,angularJs,都被捧成神了,鄙人不才,最近心情也不好,特地写这篇文章来找骂 写代码的码农都知道,Java社区虽然不是一个提出分层思想 ...

随机推荐

  1. java第一次实验报告

    北京电子科技学院(BESTI) 实    验    报    告 课程名称:java实验      班级:1352         姓名:潘恒      学号:20135209 成绩:         ...

  2. Sqlite数据库初步的了解

    转载与:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0714/1438.html    来自:泡在网上的日子. 和其他数据库一 ...

  3. C#窗体——四则运算

    用户需求:程序能接收用户输入的整数答案,并判断对错程序结束时,统计出答对.答错的题目数量.补充说明:0——10的整数是随机生成的用户可以选择四则运算中的一种用户可以结束程序的运行,并显示统计结果.在此 ...

  4. Hibernate利用纯sql

    String hql = "select * from shop where shop.strid in(select strid from moneythreeshop where mon ...

  5. python learning IO.py

    f = open('test.txt', 'r') # 'r' 表示只读 s = f.read() # 调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示 ...

  6. CSS+JS笔记

    CSS篇: 1.a标签去掉下划线 a { text-decoration:none; }

  7. AWS EC2安装docker时的问题

    在AWS EC2的实例(Ubuntu)里面安装docker时,使用通常的安装步骤 :~$ sudo apt-get update :~$ sudo apt-get install docker 安装完 ...

  8. 安装/卸载 修改Config

    参考地址:https://docs.microsoft.com/zh-cn/nuget/create-packages/source-and-config-file-transformations

  9. ISCC2018(web)

    ISCC2018 web writeup (部分) #web1:比较数字大小 只要比服务器上的数字大就好了 限制了输入长度,更改长度就好 #web2: 普通的代码审计,数组绕过 #web3:本地的诱惑 ...

  10. Ubuntu下面 PHPSTORM2017.2破解方法

    Ubuntu下面 PHPSTORM2017.2破解方法 下载破解文件 在 http://idea.lanyus.com/上面新下载一个破解文件. 破解步骤 将JetbrainsCrack-2.6.3_ ...