CODEVS1643 线段覆盖3[贪心]

1643 线段覆盖 3 

时间限制: 2 s

空间限制: 256000 KB

题目等级 : 黄金 Gold

题解

题目描述 Description

在一个数轴上有n条线段,现要选取其中k条线段使得这k条线段两两没有重合部分(端点可以重合),问最大的k为多少。

输入描述 Input Description

输入格式

输入文件的第1行为一个正整数n,下面n行每行2个数字ai,bi,描述每条线段。

输出描述 Output Description

输出格式

  输出文件仅包括1个整数,为k的最大值

样例输入 Sample Input

3

0 2

2 4

1 3

样例输出 Sample Output

2

数据范围及提示 Data Size & Hint

数据范围

对于20%的数据,n≤10;

对于50%的数据,n≤1000;

对于70%的数据,n≤100000;

对于100%的数据,n≤1000000,0≤ai<bi≤1000000。



白书

区间按r排序,然后贪心取第一个

扫一遍即可

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=1e6+5;
inline int read(){
    char c=getchar();int x=0,f=1;
    while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();}
    while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}
    return x*f;
}
int n;
struct seg{
    int l,r;
    bool operator <(const seg &x)const{return r<x.r;}
}a[N];
int main(int argc, const char * argv[]) {
    n=read();
    for(int i=1;i<=n;i++){
        a[i].l=read(),a[i].r=read();
        //if(a[i].l>a[i].r) swap(a[i].l,a[i].r);
    }
    sort(a+1,a+1+n);
    int now=a[1].l,cnt=0;
    for(int i=1;i<=n;i++){
        if(now<=a[i].l){
            cnt++;
            now=a[i].r;
        }
    }
    printf("%d",cnt);
    return 0;
}
时间: 2024-10-20 05:47:06

CODEVS1643 线段覆盖3[贪心]的相关文章

【基础练习】【贪心】codevs1214 线段覆盖题解

题目:已知数轴上0<N<10000条线段.每条线段按照端点Ai和Bi(Ai<>Bi,i=1..N)定义.端点坐标在(-999,999)内,坐标为整数.有些线段可能相交.编程实现删除最少数目的线段,使得余下的任意两条线段不相交. codevs和洛谷数据范围不同 改一下常量maxn即可 思路是很简单的贪心 //codevs1214 线段覆盖 贪心 //先排序,扫描一遍,每次保留右端点最小的线段,重叠的delete,画一张图即可证明 #include<cstdio> #inc

【贪心】线段覆盖

[贪心]线段覆盖 时间限制: 1 Sec  内存限制: 128 MB 题目描述 给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,……N.这些坐标都是区间(-999,999)的整数.有些线段之间会相互交叠或覆盖.请你编写一个程序,从给出的线段中去掉尽量少的线段,使得剩下的线段两两之间没有内部公共点.所谓的内部公共点是指一个点同时属于两条线段且至少在其中一条线段的内部(即除去端点的部分). 输入 输入第一行是一个整数N.接下来有N行,每行有二个空格隔开

线段覆盖、区间选点、区间覆盖贪心讲解

一.贪心引入: 最少硬币 有1.2.5.10.20.50.100七种面值的硬币,要支付指定的金额,问怎么支付所用的硬币个数最少. 这是一个非常日常化的问题,马上我们会想到,尽可能先用大面值的硬币,就能使支付的硬币尽可能少.这就是“贪心选择”. 二.贪心——线段覆盖 题目 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动.现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问

codevs 1214 线段覆盖

1214 线段覆盖 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,……N.这些坐标都是区间(-999,999)的整数.有些线段之间会相互交叠或覆盖.请你编写一个程序,从给出的线段中去掉尽量少的线段,使得剩下的线段两两之间没有内部公共点.所谓的内部公共点是指一个点同时属于两条线段且至少在其中一条线段的内部(即除去端点的部分). 输入描

【WikiOi 1214】线段覆盖

题目描述 Description 给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,……N.这些坐标都是区间 (-999,999)的整数.有些线段之间会相互交叠或覆盖.请你编写一个程序,从给出的线段中去掉尽量少的线段,使得剩下的线段两两之间没有内部公共 点.所谓的内部公共点是指一个点同时属于两条线段且至少在其中一条线段的内部(即除去端点的部分). 输入描述 Input Description 输入第一行是一个整数N.接下来有N行,每行有二个空格隔开的

codevs 1214线段覆盖

1214 线段覆盖 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,--N.这些坐标都是区间(-999,999)的整数.有些线段之间会相互交叠或覆盖.请你编写一个程序,从给出的线段中去掉尽量少的线段,使得剩下的线段两两之间没有内部公共点.所谓的内部公共点是指一个点同时属于两条线段且至少在其中一条线段的内部(即除去端点的部分). 输入描

【codevs】【DP】3027线段覆盖2

题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段价值之和最大. n<=1000 输入描述 Input Description 第一行一个整数n,表示有多少条线段. 接下来n行每行三个整数, ai bi ci,分别代表第i条线段的左端点ai,右端点bi(保证左端点<右端点)和价值ci. 输出描述 Output Description 输出能够获得

P1514 引水入城[搜索,线段覆盖]

题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个\(N\) 行\(M\) 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度. 为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施.水利设施有两种,分别为蓄水厂和输水站.蓄水厂的功能是利用水泵将湖泊中的水抽取到所在城市的蓄水池中. 因此,只有与湖泊毗邻的第1行的城市可以建造蓄水厂.而输水站的功能则是通过输水管线利用高度落差,将湖水从高处向低处输送

Gym - 102012H Rikka with A Long Colour Palette N线段K色贪心染色

给你数轴上的N条线段和K种颜色 K和N1e5 要你把这N条线段染色 使得有K种不同颜色的线段长度最长 首先很容易想到被至少K段线段覆盖的区间是一定有贡献的 接下来就是怎么染色的问题 我们把这N个区间的端点排序一下 把K个颜色放入一个队列 碰到端点是左端点 先检查颜色队列是否为空 为空的话 把这个左端点放入一个待染队列 为什么还需要一个待染队列? 因为如果当前区间已经被K条线段覆盖再来一条的话 我们不能随意染色 随意染色是会影响后面的答案的 颜色队列不为空的话 我们就可以直接贪心地给这个线段染色