• 田忌赛马


    题目描述

    你要和田忌赛马。你们各自有 𝑁N 匹马,并且要进行 𝑁N 轮比赛,每轮比赛,你们都要各派出一匹马决出胜负。

    你的马匹的速度分别为 u1​,u2​,⋯,un​,田忌的马匹的速度分别为 v1​,v2​,⋯,vn​。田忌会按顺序派出他的马匹,请问你要如何排兵布阵,才能赢得最多轮次的比赛?巧合的是,你和田忌的所有马匹的速度两两不同,因此不可能出现平局。

    输入格式

    第一行一个整数 N。保证 1≤N≤5×10^4

    接下来一行 𝑁N 个用空格隔开的整数,依次为 u1​,u2​,⋯,un​,表示你的马匹们的速度。保证 1≤ui​≤2N。

    接下来一行 𝑁N 个用空格隔开的整数,依次为 v1​,v2​,⋯,vn​,表示田忌的马匹们的速度。保证 1≤vi​≤2N。

    输出格式

    输出一行,表示你最多能获胜几轮。

    输入输出样例

    输入 #1复制

    3
    1 3 5
    2 4 6

    输出 #1复制

    2

    输入 #2复制

    5
    10 3 5 8 7
    4 6 1 2 9

    输出 #2复制

    5

    说明/提示

    样例解释 1

    第 1 轮,田忌派出速度为 2 的马匹,你可以派出速度为 3 的马匹迎战,本轮你获胜。

    第 2 轮,田忌派出速度为 4 的马匹,你可以派出速度为 5 的马匹迎战,本轮你获胜。

    第 3 轮,田忌派出速度为 6 的马匹,你可以派出速度为 1 的马匹迎战,本轮田忌获胜。

    如此,你可以赢得 2 轮比赛。

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. int main() {
    6. // 读取输入的比赛的马匹数量
    7. int n;
    8. cin >> n;
    9. // 分别保存你和田忌的马匹的速度
    10. vector<int> you(n);
    11. vector<int> tian(n);
    12. // 读取你的马匹的速度
    13. for (int i = 0; i < n; ++i) {
    14. cin >> you[i];
    15. }
    16. // 读取田忌的马匹的速度
    17. for (int i = 0; i < n; ++i) {
    18. cin >> tian[i];
    19. }
    20. // 排序你和田忌的马匹的速度
    21. sort(you.begin(), you.end());
    22. sort(tian.begin(), tian.end());
    23. // 使用贪心算法计算你可以赢得的最多比赛轮数
    24. int cnt = 0;
    25. int j = 0;
    26. for (int i = 0; i < n; ++i) {
    27. if (you[i] > tian[j]) {
    28. ++cnt;
    29. ++j;
    30. }
    31. }
    32. // 输出结果
    33. cout << cnt << endl;
    34. return 0;
    35. }

  • 相关阅读:
    「CSP-2023」我曾璀璨星空,星月相伴,致远方,致过往。
    【力扣-1300打卡】
    Hotspot虚拟机原理一
    .NET 7 预览版 7
    三、程序员指南:数据平面开发套件
    【Linux】-进程间通信-匿名管道通信(以及模拟一个进程池)
    动能方案 | 15693协议的读卡器应用 DP1363F 替代RC663
    9.基于netty实现WebSocket服务器
    如何实现流量控制和熔断降级?
    【自然语言处理】不同策略的主题建模方法比较
  • 原文地址:https://blog.csdn.net/2301_79801189/article/details/139424484