B3928 [GESP202312 四级] 田忌赛马

[GESP202312 四级] 田忌赛马

题目描述

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

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

输入格式

第一行一个整数 N N N。保证 1 ≤ N ≤ 5 × 1 0 4 1\le N \le 5\times 10^4 1N5×104

接下来一行 N N N 个用空格隔开的整数,依次为 u 1 , u 2 , ⋯ , u n u_1,u_2,\cdots,u_n u1,u2,,un,表示你的马匹们的速度。保证 1 ≤ u i ≤ 2 N 1\le u_i\le 2N 1ui2N

接下来一行 N N N 个用空格隔开的整数,依次为 v 1 , v 2 , ⋯ , v n v_1,v_2,\cdots,v_n v1,v2,,vn,表示田忌的马匹们的速度。保证 1 ≤ v i ≤ 2 N 1\le v_i\le 2N 1vi2N

输出格式

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

样例 #1

样例输入 #1

3
1 3 5
2 4 6

样例输出 #1

2

样例 #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 轮比赛。

解析

题目描述:
你要和田忌赛马。你们各自有N匹马,并且要进行N轮比赛,每轮比赛,你们都要各派出一匹马决出胜负。你的马匹的速度分别为u1,u2,…,un,田忌的马匹的速度分别为v1,v2,…,vn。田忌会按顺序派出他的马匹,请问你要如何排兵布阵,才能赢得最多轮次的比赛?巧合的是,你和田忌的所有马匹的速度两两不同,因此不可能出现平局。

解题思路:
这是一个经典的贪心算法问题。我们可以按照以下策略来安排比赛:

  1. 将你的马匹按速度从小到大排序,将田忌的马匹按速度从小到大排序。
  2. 从速度最慢的马匹开始,每次选择你的马匹中速度最慢且能够战胜田忌当前马匹的马匹出战。
  3. 如果你没有马匹能够战胜田忌当前的马匹,则选择你最慢的马匹出战。

这种策略的思路是,尽可能用较慢的马匹去战胜田忌的马匹,从而节省更快的马匹来对付田忌的更快的马匹。

C++代码实现:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {int N;cin >> N;vector<int> u(N), v(N);for (int i = 0; i < N; ++i) {cin >> u[i];}for (int i = 0; i < N; ++i) {cin >> v[i];}sort(u.begin(), u.end());sort(v.begin(), v.end());int i = 0, j = 0, wins = 0;while (i < N && j < N) {if (u[i] > v[j]) {++wins;++j;}++i;}cout << wins << endl;return 0;
}

代码解释:

  1. 读入数据,包括马匹数量N,以及你的马匹速度向量u和田忌的马匹速度向量v。
  2. 使用sort函数对向量u和v分别进行排序。
  3. 定义指针i和j,分别指向向量u和v的起始位置,定义计数变量wins,初始值为0。
  4. 使用while循环,同时遍历向量u和v:
    • 如果u[i] > v[j],说明你的当前最慢的马匹能够战胜田忌的当前马匹,将wins加1,并将j向后移动一位。
    • 无论是否获胜,将i向后移动一位,表示你的当前马匹已经出战。
  5. 输出wins的值,即为你能够获胜的最多轮数。

这个解法的时间复杂度为O(NlogN),主要是排序的时间复杂度。空间复杂度为O(N),需要存储两个向量。

与之前的解法相比,这个解法使用了C++的STL向量(vector)和算法(algorithm)库,代码更加简洁易读。同时,在遍历向量时,使用了while循环和两个指针i和j,避免了不必要的比较和移动操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024上海初中生古诗文大会倒计时4个多月:单选题真题和独家解析

现在距离2024年初中生古诗文大会还有4个多月时间&#xff0c;我们继续来看10道选择题真题和详细解析&#xff0c;以下题目截取自我独家制作的在线真题集&#xff0c;都是来自于历届真题&#xff0c;去重、合并后&#xff0c;每道题都有参考答案和解析。 为帮助孩子自测和练习&…

STM32F103C8移植uCOSIII并以不同周期点亮两个LED灯(HAL库方式)【uCOS】【STM32开发板】【STM32CubeMX】

STM32F103C8移植uC/OSIII并以不同周期点亮两个LED灯&#xff08;HAL库方式&#xff09;【uC/OS】【STM32开发板】【STM32CubeMX】 实验说明 将嵌入式操作系统uC/OSIII移植到STM32F103C8上&#xff0c;构建两个任务&#xff0c;两个任务分别以1s和3s周期对LED进行点亮—熄灭的…

在ADG只读备库使用数据泵导出数据

实际场景中存在某些需求&#xff0c;客户害怕在主库使用数据泵导出数据会对主库的运行造成影响&#xff0c;所以要求从备库导出数据。但数据泵无法直接从只读备库进行导出&#xff0c;需要借助一个中间库来实现。 针对在ADG只读备库环境无法使用数据泵进行导出的问题&#xff…

前端渲染大量数据思路【虚拟列表】【异步机制】

当浏览器遇到性能瓶颈导致页面卡顿时&#xff0c;你会怎么处理&#xff1f;如何查找问题的原因&#xff1f; 浏览器本身自带性能检测工具&#xff0c;通常我们分析由脚本导致的页面卡顿会选择 性能&#xff08;performance&#xff09; 选项卡&#xff0c;在其中我们可以找到导…

3D Gaussian Splatting for Real-Time Radiance Field Rendering

辐射场方法最近在基于多张照片或视频进行新视角合成方面取得了革命性进展。然而&#xff0c;实现高视觉质量仍然需要耗时且计算成本高的神经网络&#xff0c;而最近的快速方法不可避免地在速度和质量之间进行了权衡。对于无界和完整的场景&#xff08;而不是孤立的物体&#xf…

【Vue】vuex 的使用 - 创建仓库

通用的地方我们一般会称之为仓库 1.安装 vuex 安装vuex与vue-router类似&#xff0c;vuex是一个独立存在的插件&#xff0c;如果脚手架初始化没有选 vuex&#xff0c;就需要额外安装。 yarn add vuex3 或者 npm i vuex32.新建 store/index.js 专门存放 vuex ​ 为了维护项目…

【排序算法】总结篇

✨✨这些 排序算法都是指的 需要进行比较的排序算法 ✨✨下面都是略微讲解一下思路&#xff0c;如果需要详细了解哪一个排序&#xff0c;点击&#x1f449;链接即可 ✨✨对于时间、空间复杂度、稳定性&#xff0c;希望你&#x1f9d1;‍&#x1f393;能够理解记忆&#x1f9d1;…

如何优化Vue组件的性能和通信效率?

优化Vue组件的性能和通信效率涉及多个方面&#xff0c;包括组件的设计、懒加载、条件渲染、事件通信以及避免不必要的重新渲染等。下面是一些实用的优化策略&#xff1a; 组件懒加载&#xff1a; 使用异步组件加载机制&#xff0c;只有在组件需要显示时才去加载该组件。例如&a…

Science刊发!乌普萨拉大学最新神经形态触觉人造皮肤可快速精准识别物体

当前&#xff0c;人形机器人使用的传统电子皮肤在处理触觉感知信息方面的能力并不强&#xff0c;尤其是在时间信息编码和快速特征提取方面存在一定的局限性。简单来说就是机器人无法完成在接触到物品的瞬间&#xff0c;判断用怎样的力度去对该物品做出反应。尽管多模态大模型和…

顶级域名和二级域名的区别

互联网是一个由无数个网络节点组成的复杂系统&#xff0c;而域名则是这个系统中用于识别和定位这些节点的重要工具。在域名体系中&#xff0c;顶级域名(Top-Level Domain&#xff0c;TLD)和二级域名(Second-Level Domain&#xff0c;SLD)是两个基本的层级概念。本文将探讨这两者…

备战 清华大学 上机编程考试-冲刺前50%,倒数第6天

真题训练&#xff1a; T1:舞蹈团 - 排序滑动窗口 生活在在外星球X上的小Z想要找一些小朋友组成一个舞蹈团&#xff0c;于是他在网上发布了信息&#xff0c;一共有 \(n\) 个人报名面试。面试必须按照报名的顺序依次进行。小Z可以选择在面试完若干小朋友以后&#xff0c;在所有…

手搓文件格式转换

最初目标&#xff1a; 自己搞一个免费的pdf文件转换 根据现有的开源jar 项目实现思路&#xff1a; 1. 项目原因a. 我想转换文件b. wps 文件转换 2. 最初的状态a. jar运行的b. main,输入文件路径c. 一定的编程能力的人才能得 3. 开始构思项目a. 网页版本b. 想着大家一起用 4. …

MyBatis二级缓存开启条件

MyBatis缓存为俩层体系。分为一级缓存和二级缓存。 一级缓存&#xff1a; 一级缓存默认开启&#xff0c;一级缓存的作用域是SqlSession级别的&#xff0c;这意味着当你更换SqlSession之后就不能再利用原来的SqlSession的一级缓存了。不同的SqlSession之间的一级缓存是隔离的。…

Django更改超级用户密码

Django更改超级用户密码 1、打开shell 在工程文件目录下敲入&#xff1a; python manage.py shell再在python交互界面输入&#xff1a; from django.contrib.auth.models import User user User.objects.get(username root) user.set_password(123456) user.save()其中ro…

adb 删除文件或文件夹

1. 通过adb shell 进入终端shell 2. cd sdcard/data //进入系统内指定文件夹 3. ls //列表显示当前文件夹内容 4. remount //挂载 5. rm -r xxx // 删除名字为xxx的文件夹及其里面的所有文件 6. rm xxx // 删除文件xxx 7. rm dir xxx // 删除xxx的文件夹 8. cat 123…

递归【2】(组合回溯(生成括号)、子集回溯(背包问题))

括号对 &#xff08;组合型回溯&#xff09; 分解成子问题&#xff0c;每一次添加括号分两步&#xff1a; if左括号小于n&#xff0c;加左括号&#xff0c;然后k(index1), if左括号大于有括号&#xff0c;加右括号&#xff0c;k(index1),然后收尾括号单独考虑&#xff0c;到…

二叉树----7-3 列出叶结点

对于给定的二叉树,本题要求你按从上到下、从左到右的顺序输出其所有叶结点。 输入格式: 首先第一行给出一个正整数 n(≤10),为树中结点总数。树中的结点从 0 到 n−1 编号。随后 n 行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 "…

【Ardiuno】实验使用ESP32连接Wifi(图文)

ESP32最为精华和有特色的地方当然是wifi连接&#xff0c;这里我们就写程序实验一下适使用ESP32主板连接wifi&#xff0c;为了简化实验我们这里只做了连接部分&#xff0c;其他实验在后续再继续。 由于本实验只要在串口监视器中查看结果状态即可&#xff0c;因此电路板上无需连…

Transformer模型结构解析:编码器与完整模型的应用场景

Transformer模型结构解析&#xff1a;编码器与完整模型的应用场景 Transformer模型自2017年由Google的研究者提出以来&#xff0c;已经在自然语言处理&#xff08;NLP&#xff09;领域产生了革命性的影响。Transformer模型的核心特点是其使用了自注意力&#xff08;Self-Atten…

ToxVidLLM:一个用于检测有害视频的多模态多任务框架

在一个社交媒体平台赋予用户成为内容创作者力量的时代&#xff0c;数字领域见证了前所未有的信息传播激增&#xff0c;到2023年&#xff0c;近82%的互联网流量是视频内容。因此&#xff0c;像抖音和YouTub这样的平台已经成为主要的信息来源。一个显著的统计数据凸显了这些平台的…