田忌赛马

题目描述

你要和田忌赛马。你们各自有 𝑁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 轮比赛。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    // 读取输入的比赛的马匹数量
    int n;
    cin >> n;

    // 分别保存你和田忌的马匹的速度
    vector<int> you(n);
    vector<int> tian(n);

    // 读取你的马匹的速度
    for (int i = 0; i < n; ++i) {
        cin >> you[i];
    }

    // 读取田忌的马匹的速度
    for (int i = 0; i < n; ++i) {
        cin >> tian[i];
    }

    // 排序你和田忌的马匹的速度
    sort(you.begin(), you.end());
    sort(tian.begin(), tian.end());

    // 使用贪心算法计算你可以赢得的最多比赛轮数
    int cnt = 0;
    int j = 0;
    for (int i = 0; i < n; ++i) {
        if (you[i] > tian[j]) {
            ++cnt;
            ++j;
        }
    }

    // 输出结果
    cout << cnt << endl;

    return 0;
}

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值