本文主要是介绍【洛谷P1803 凌乱的yyy / 线段覆盖】/【一本通1323:活动选择】 ——贪心算法,根据结束时间结构体排序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
P1803 凌乱的yyy / 线段覆盖
题目背景
快 noip 了,yyy 很紧张!
题目描述
现在各大 oj 上有 nn 个比赛,每个比赛的开始、结束的时间点是知道的。
yyy 认为,参加越多的比赛,noip 就能考的越好(假的)。
所以,他想知道他最多能参加几个比赛。
由于 yyy 是蒟蒻,如果要参加一个比赛必须善始善终,而且不能同时参加 22 个及以上的比赛。
输入格式
第一行是一个整数 n ,接下来 n 行每行是 2 个整数 ,表示比赛开始、结束的时间。
输出格式
一个整数最多参加的比赛数目。
输入输出样例
输入
3 0 2 2 4 1 3
输出
2
说明/提示
对于 的数据, 。
对于 的数据, 。
对于 的数据, 。
对于 的数据, , 。
同样,这道题和一本通的【活动选择】除了题面不一样,思路一模一样。
一本通1323:活动选择
【题目描述】
学校在最近几天有nn个活动,这些活动都需要使用学校的大礼堂,在同一时间,礼堂只能被一个活动使用。由于有些活动时间上有冲突,学校办公室人员只好让一些活动放弃使用礼堂而使用其他教室。
现在给出nn个活动使用礼堂的起始时间和结束时间,请你帮助办公室人员安排一些活动来使用礼堂,要求安排的活动尽量多。
【输入】
第一行一个整数;
接下来的nn行,每行两个整数,第一个,第二个是。
【输出】
输出最多能安排的活动个数。
【输入样例】
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:活动选择】 ——贪心算法,根据结束时间结构体排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!