C++ 最多参加的场次。

题目描述 现在各大oi上有n个比赛,每个比赛的开始、结的时间点是知道的yyy 认为,参加越多的比赛,noip 就能考的越好(假的)。 所以,他想知道他最多能参加几个比赛 由于yyy 是药,如果要参加一个比赛必须善始善终,而且不能同时参加2个及以上的比赛 输入格式 第一行是一个整数n,接下来n行每行是2个整数a(a,表示比赛开始、结束的时间 输出格式 一个整数最多参加的比赛数目

这道题可以用贪心算法来解决,具体方法如下:

  1. 首先按照结束时间将所有比赛排序,结束时间早的排在前面。

  2. 从第一个比赛开始,依次判断每个比赛能否参加。如果当前比赛的开始时间晚于上一个比赛的结束时间,则可以参加。否则,不能参加。

  3. 记录下能参加的比赛数目,最后输出即可。

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

int main() {
  int n;
  cin >> n;
  vector<pair<int, int>> matches;

  for (int i = 0; i < n; i++) {
    int start, end;
    cin >> start >> end;
    matches.push_back(make_pair(start, end));
  }

  sort(matches.begin(), matches.end(),
       [](const pair<int, int> &a, const pair<int, int> &b) {
         return a.second < b.second; // 按结束时间升序排序
       });

  int count = 0;    // 参加比赛的数目
  int end_time = 0; // 上一个比赛的结束时间

  for (const auto &match : matches) {
    if (match.first >= end_time) { // 可以参加该比赛
      count++;
      end_time = match.second;
    }
  }

  cout << count << endl;
  return 0;
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-17 19:20:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-17 19:20:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-17 19:20:02       82 阅读
  4. Python语言-面向对象

    2024-02-17 19:20:02       91 阅读

热门阅读

  1. vue3 axios二次封装

    2024-02-17 19:20:02       64 阅读
  2. 安装GeoServer,配置CORS

    2024-02-17 19:20:02       50 阅读
  3. 面试计算机网络框架八股文十问十答第六期

    2024-02-17 19:20:02       57 阅读
  4. 国产计算机的种类和应用

    2024-02-17 19:20:02       48 阅读
  5. 实现钉钉自定义机器人推送markdown类型消息

    2024-02-17 19:20:02       54 阅读
  6. 4 存储器管理(上)

    2024-02-17 19:20:02       56 阅读
  7. 倒计时52天(待续,,,

    2024-02-17 19:20:02       48 阅读
  8. Leetcode 496. 下一个更大元素 I

    2024-02-17 19:20:02       51 阅读