【洛谷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

相关文章

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据