【洛谷P1803 凌乱的yyy / 线段覆盖】/【一本通1323:活动选择】 ——贪心算法,根据结束时间结构体排序

本文主要是介绍【洛谷P1803 凌乱的yyy / 线段覆盖】/【一本通1323:活动选择】 ——贪心算法,根据结束时间结构体排序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

P1803 凌乱的yyy / 线段覆盖

题目背景

快 noip 了,yyy 很紧张!

题目描述

现在各大 oj 上有 nn 个比赛,每个比赛的开始、结束的时间点是知道的。

yyy 认为,参加越多的比赛,noip 就能考的越好(假的)。

所以,他想知道他最多能参加几个比赛。

由于 yyy 是蒟蒻,如果要参加一个比赛必须善始善终,而且不能同时参加 22 个及以上的比赛。

输入格式

第一行是一个整数 n ,接下来 n 行每行是 2 个整数 a_i, b_i ( a_i<b_i ),表示比赛开始、结束的时间。

输出格式

一个整数最多参加的比赛数目。

输入输出样例

输入

3
0 2
2 4
1 3

输出

2

说明/提示

对于 20\% 的数据, n \le 10

对于 50\% 的数据, n \le 10^3

对于 70\% 的数据, n \le 10^{5}

对于 100\% 的数据, 1\le n \le 10^{6} , 0 \le a_{i} < b_{i} \le 10^6

同样,这道题和一本通的【活动选择】除了题面不一样,思路一模一样。

一本通1323:活动选择

【题目描述】

学校在最近几天有nn个活动,这些活动都需要使用学校的大礼堂,在同一时间,礼堂只能被一个活动使用。由于有些活动时间上有冲突,学校办公室人员只好让一些活动放弃使用礼堂而使用其他教室。

现在给出nn个活动使用礼堂的起始时间begin_i和结束时间end_i(begin_i<end_i),请你帮助办公室人员安排一些活动来使用礼堂,要求安排的活动尽量多。

【输入】

第一行一个整数n(n\le 1000)

接下来的nn行,每行两个整数,第一个begin_i,第二个是end_i(begin_i<end_i\le 32767)

【输出】

输出最多能安排的活动个数。

【输入样例】

11
3 5
1 4
12 14
8 12
0 6
8 11
6 10
5 7
3 8
5 9
2 13

【输出样例】

4

这道题明显就是贪心嘛。

但是,思路比较特殊,需要排序的是结束时间,不可以按照持续时间排序,要不然容易交错时间。

于是下面这个代码可以同时AC两个题目。(自己觉得码风还是挺好的,注:stable_sort和sort是一样的)

#include <iostream>
#include <algorithm>
using namespace std;
struct node
{int b, e;
};
bool cmp(node arr, node arr1)
{return arr.e < arr1.e;
}
int main()
{int n;cin >> n;node *arr = new node[n + 10];  // 动态声明数组,减少内存,for (int i = 0; i < n; i++){cin >> arr[i].b >> arr[i].e;}stable_sort(arr, arr + n, cmp);// cout << "_----------" << endl;// for (int i = 0; i < n; i++)// {//     cout << arr[i].b << " " << arr[i].e << endl;// }// cout << "_----------" << endl;int cnt = 1, i, j = 0;for (i = 0; i < n; i++){i = j;// cout << "i=" << i << ";   j=" << j << endl;// cout << "cnt=" << cnt << endl;for (j = i + 1; j < n; j++){if (arr[j].b >= arr[i].e){cnt++;break;}}}cout << cnt << endl;return 0;
}

这篇关于【洛谷P1803 凌乱的yyy / 线段覆盖】/【一本通1323:活动选择】 ——贪心算法,根据结束时间结构体排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/697101

相关文章

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

如何利用Java获取当天的开始和结束时间

《如何利用Java获取当天的开始和结束时间》:本文主要介绍如何使用Java8的LocalDate和LocalDateTime类获取指定日期的开始和结束时间,展示了如何通过这些类进行日期和时间的处... 目录前言1. Java日期时间API概述2. 获取当天的开始和结束时间代码解析运行结果3. 总结前言在J

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更