【题目全解】蓝桥杯24省赛C++中高级组题干题解

本帖只提供六道编程题的解题思路,部分题目并不提供实际的代码(因为我赛时忘记把代码截图下来了)。

T1 - 看书

题干描述: 一本书共 n n n 页,小明计划第一天看 x x x 页,此后每一天都要比前一天多看 y y y
页,请问小明几天可以看完这本书?

输入格式: 一行输入三个整数 n n n x x x y y y ( 20 ≤ n ≤ 5000 , 1 ≤ x , y ≤ 20 ) (20\le n\le 5000,1\le x,y\le 20) (20n50001xy20),分别表示书的总页数、计划第一天看的页数以及此后每天都要比前一天多看的页数,整数之间以一个空格隔开。

输出格式: 输出一个整数,表示小明几天可以看完这本书。

样例输入:100 10 5

样例输出:5

解题思路: 防爆零题。用一个 while 循环来判断还有多少页的书需要看,循环里拿一个变量来记录循环次数作为答案即可。

T2 - 数字交换

题干描述: 给定一个正整数 n n n,请将 n n n 的最高位与最低位的数字进行交换,并输出交换后的结果。如果交换后的结果有前导 0 0 0,去除前导 0 0 0 后再输出结果。

输入描述: 输入一个正整数 n ( 100 ≤ n ≤ 1 0 9 ) n (100\le n\le10^9) n(100n109)

输出描述: 输出答案。

样例输入: 173

样例输出: 371

解题思路: 以字符串的形式来读入字符,先用 C++ 自带的 swap 交换该字符串的第一位和最后一位。之后用 while 循环记录第一个合法数字出现的位置(即删除前导零)。最后用 string 类的 .substr() 方法截取字符串有效子串。

T3 - 出现奇数次的数

题干描述: 给定 n n n 个整数,其中只有一个数出现了奇数次,请找出这个数。

输入格式:

第一行输入一个整数 n ( 1 ≤ n ≤ 1 0 5 ) n (1\le n \le 10^5) n(1n105)
第二行输入 n n n 个整数 ( 1 ≤ 整数 ≤ 1 0 9 ) (1\le 整数\le 10^9) (1整数109),整数之间以一个空格隔开(数据保证只有一个数出现了奇数次)

输出格式: 输出一个整数,表示出现了奇数次的数。

样例输入:

7
6 2 4 6 4 2 6

样例输出:

6

解题思路:

这道题可以有多种算法来解。一种方法是使用 sort 函数对数组排序,然后找出某个出现奇数次的数即可。还可以用 STL 的 map 数据结构,类似桶排序的方法,来记录某一个键出现的次数,最后扫一遍就可以找出来了。

最方便的做法是使用异或的性质来快速找到某个出现奇数次的数。具体地,将数组中的所有元素依次进行异或运算,最终结果就是唯一一个出现奇数次的数,因为出现偶数次的数都会在异或中抵消掉。

代码展示:

#include <iostream>
using namespace std;int main(){int n, t, ans = 0;cin >> n; while(n--){cin >> t;ans ^= t;}cout << ans << endl;return 0;
}

T4 - 字母移位

这道题是我觉得整一场比赛中最有问题的题目了。开了 long long 过不了,不开 long long 不取模竟然是过得了的。这证明这道题的数据是有问题的。(一个半小时的考试,这道题浪费了我一个小时的调试时间。我只能说,出题组太垃圾了)。

题干描述:

字母移位:表示将字母按照字母表的顺序进行移动。

例如:‘b’ 向右移动一位是 ‘c’,“向左移动两位是 ‘d’。

特别地,‘a’ 向左移动一位是 ‘z’,‘z’ 向右移动一位是 ‘a’。

给定一个仅包含小写字母且长度为 n n n 的字符串 s s s,以及 n n n 个正整数 a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,,an,接下来对字符串 s s s 按如下规律操作:

  1. 将第 1 1 1 位字符向左移动 a 1 a_1 a1 位;
  2. 再将第 1 、 2 1、2 12 位字符都向右移动 a 2 a_2 a2 位;
  3. 再将第 1 、 2 、 3 1、2、3 123 位字符都向左移动 a 3 a_3 a3 位;
  4. 再将第 1 、 2 、 3 、 4 1、2、3、4 1234 位字符都向右移动 a 4 a_4 a4 位;

以此类推,直到将 s s s 的第 1 1 1 到第 n n n 位字符都(按规律向左或向右)移动完毕。

最后,将操作完成后的字符串 s s s 输出。

例如: n = 5 n = 5 n=5,字符串 s = “abcde”, 5 5 5 个正整数为 1, 3, 5, 7, 9;

将 “abcde” 的第 1 1 1 位字符 “a” 向左移动 1 1 1 位, s s s 变为 “zbcde”;

再将 “zbcde” 的前 2 2 2 位字符 “zb” 向右移动 3 3 3 位, s s s 变为 “cecde”;

再将 “cecde” 的前 3 3 3 位字符 “cec” 向左移动 5 5 5 位, s s s 变为 “xzxde”;

再将 “xzxde” 的前 4 4 4 位字符 “xzxd” 向右移动 7 7 7 位, s s s 变为 “egeke”;

再将 “egeke” 的前 5 5 5 位字符 “egeke” 向左移动 9 9 9 位, s s s 变为 “vxvbv”。

最后,将操作完成后的字符串 “vxvbv” 输出。

样例输入:

5
abcde
1 3 5 7 9

样例输出:

vxvbv

解题思路:

首先看数据量,发现这道题的数据量特别大,如果暴力的话肯定是会 TLE 的(亲测,暴力可以拿到 36 % 36\% 36% 的高分。考虑按照以下方法优化:

注意到对于字符串的第 i 个字符,在完全模拟的过程中会调整 n − i + 1 n - i + 1 ni+1 次。但事实上,我们只需要记录某一个字符最终的偏移量就好了。参考样例,a 字符在经过 -1, +3, -5, +7, -9 (ASCII 码位移)后,最终只会偏移 -5 位。我们只需要记录每一位的最终偏移量就好了。

为了优化算法,考虑使用差分的策略来进行区间位移的操作。具体代码如下(整解,但因数据问题无法 AC):

在这里插入图片描述

备注:记得开 int,开 long long 不拿分。

T5 - 通关游戏的最少能量值。

题干描述:

有一款新游戏,通关这个游戏需要完成 n n n 个任务,这 n n n 个任务可按任意次序完成。每个任务设置了启动能量值和完成任务消耗的能量值,且消耗的能量值小于等于该任务的启动能量值。如果玩家当前的能量值低于该任务启动能量值,则不能开始该任务。

例 1:玩家当前的能量值为 7 7 7,当前任务的启动能量值为 5 5 5,完成任务消耗的能量值为 3 3 3,则可以开始该任务,完成任务后玩家剩余能量值为 4 4 4

例 2:玩家当前的能量值为 5 5 5,当前任务的启动能量值为 8 8 8,则无法开始该任务。

游戏开始时玩家需要一个初始能量值用来完成这 n n n 个任务。当给定每个任务的启动能量值和完成任务消耗的能量值时,请问初始能量的最小值是多少?

样例输入:

3
2 2
9 5
7 4

样例输出:

12

解题思路: 考虑使用二分+贪心的策略。首先用贪心算法求得一个最优的打怪顺序。在这里,我们可以按照打完怪兽的剩余血量对数组进行排序。之后二分答案判断以 mid 为初始血量是否可以打完所有的怪物即可。

T6 - 物品分组

巧了,洛谷原题。我在 N N N 年前做过这道题目。链接:P1182 数列分段

数列分段 Section II

题目描述

题干描述: 对于给定的一个长度为 N N N 的正整数数列 A 1 ∼ N A_{1\sim N} A1N,现要将其分成 M M M M ≤ N M\leq N MN)段,并要求每段连续,且每段和的最大值最小。

样例输入:

5 2
6 1 3 8 4

样例输出:

12

解题思路: 也是一道很经典的二分答案题目,二分判断当每一段的和最大为 mid 时,是否可以分成 m m m 段即可。check 函数也是比较好写的。

#include <iostream>
#include <algorithm>
using namespace std;int n, m;
int l, r, ans;
int arr[100005];// 判断当每一段的和最大为 mid 时,是否可以分成 m 段。
bool check(int mid){int cut=1, current=0;for (int i=0; i<n; i++){if (current + arr[i] <= mid){current += arr[i];} else{current = arr[i];cut++;}}return cut <= m;
}int main(){cin >> n >> m;int total=0;for (int i=0; i<n; i++){cin >> arr[i];r += arr[i];l = max(l, arr[i]);}while(l <= r){int mid = (l+r)/2; if(check(mid)){r = mid - 1;ans = mid;} else l = mid + 1;}cout << l << endl;return 0;
}

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

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

相关文章

【面试八股总结】MySQL 锁:全局锁、表级锁、行级锁

1. 全局锁 顾名思义&#xff0c;全局锁就是对整个数据库实例加锁。 MySQL 提供了⼀个加全局读锁的方法&#xff1a; flush tables with read lock 释放全局锁&#xff0c;执行命令&#xff1a; unlock tables 需要让整个库处于只读状态的时候&#xff0c;可以使用全局锁命…

鸿蒙(API 12 Beta6版)图形【NativeImage开发指导 (C/C++)】方舟2D图形服务

场景介绍 NativeImage是提供Surface关联OpenGL外部纹理的模块&#xff0c;表示图形队列的消费者端。开发者可以通过NativeImage接口接收和使用Buffer&#xff0c;并将Buffer关联输出到OpenGL外部纹理。 针对NativeImage&#xff0c;常见的开发场景如下&#xff1a; 通过Nati…

linux系统中USB模块鼠标驱动实现

各位开发者大家好,今天主要给大家分享一下,Linux系统中使用libusb的方法以及鼠标驱动实现。 第一:libusb概述 参考网址:* libusb GIT仓库:https://github.com/libusb/libusb.git * libusb 官网:https://libusb.info/ * libusb API接口:https://libusb.sourceforge.io/…

mysql 使用 general 开启SQL跟踪功能

查看当前状态 mysql> SHOW VARIABLES LIKE %general%; 启用 临时启用 SET GLOBAL general_logon; SET GLOBAL general_log_file/tmp/general.log; 永久启用 通过修改配置文件来启用,需要重启mysql服务 [mysqld] general_logON general_log_file/tmp/general.log 再次查看状态…

【Redis】Redis 持久化机制详解:RDB、AOF 和混合持久化的工作原理及优劣分析

目录 持久化RDB触发机制流程说明RDB ⽂件的处理RDB 的优缺点 AOF使⽤ AOF命令写⼊⽂件同步重写机制启动时数据恢复 混合持久化小结 持久化 回顾 MySQL 的事务的特性&#xff1a; 原子性一致性持久性&#xff08;持久化&#xff09;隔离性 持久化&#xff1a;把数据存储在硬盘上…

CAN总线之一篇文章讲清楚Motorala和inter格式

前言&#xff1a; 之前的工作中&#xff0c;其实对Motorala和inter格式并不是了解的十分透彻。最近由于工作需要&#xff0c;研究了一下这两种格式&#xff0c;发现里面的门道其实挺复杂的。 特此作了一些总结&#xff1a;和大家一起分享。 我查了不少文档&#xff0c;描述其…

MongoDB 向 PostgreSQL 宣战

上周 MongoDB 发布了一份亮眼的季度财报&#xff0c;盘后股价涨幅超过 18%。 值得一提的是&#xff0c;MongoDB 的 CEO Dev Ittycheria 特别提到 MongoDB 正在借助自己的数据库服务 Atlas 从 PostgreSQL 那里挖角。原话是举了一个博彩网站的例子&#xff1a; “Initially, th…

【C++ 第十八章】C++11 新增语法(4)

前情回顾&#xff1a; 【C11 新增语法&#xff08;1&#xff09;&#xff1a;1~6 点】 C11出现与历史、花括号统一初始化、initializer_list初始化列表、 auto、decltype、nullptr、STL的一些新变化 【C11 新增语法&#xff08;2&#xff09;&#xff1a;7~8 点】 右值引用和…

uniapp插槽用法

目录 什么是插槽? 基本概念 默认插槽 命名插槽 作用域插槽 场景一:子插槽向父组件传递一个字符串 场景二:子插槽向父组件传递对象 什么是插槽? 在 UniApp 中&#xff0c;插槽&#xff08;Slot&#xff09;是一种允许父组件向子组件特定位置插入HTML内容的方式。这种方式使得组…

快速便捷地解决 reCAPTCHA 的方法

reCAPTCHA 是一种流行的挑战-响应系统&#xff0c;旨在通过提供人类易于解决但机器难以解决的难题来保护网站免受机器人和自动化滥用。无论您是处理网络抓取项目中的 reCAPTCHA 的开发人员&#xff0c;还是在各种网站上浏览的用户&#xff0c;了解如何有效地处理 reCAPTCHA 都可…

每日OJ_牛客_五子棋(判断是否有赢)

目录 牛客_五子棋&#xff08;判断是否有赢&#xff09; 解析代码 牛客_五子棋&#xff08;判断是否有赢&#xff09; 五子棋__牛客网 题目&#xff1a; 用例输入&#xff1a; .................... .................... .................... .................... ....…

基础闯关4

环境配置 我们来配置LlamaIndex实验环境&#xff0c;首先创建Python环境并安装必要的库&#xff1a; conda create -n llamaindex python3.10 conda activate llamaindex conda install pytorch2.0.1 torchvision0.15.2 torchaudio2.0.2 pytorch-cuda11.7 -c pytorch -c nvid…

VBA数据库解决方案第十四讲:如何在数据库中动态删除和建立数据表

《VBA数据库解决方案》教程&#xff08;版权10090845&#xff09;是我推出的第二套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;是学完字典后的另一个专题讲解。数据库是数据处理的利器&#xff0c;教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…

Pixelmator Pro for Mac 专业图像处理软件【媲美PS的修图软件】

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件…

MySQL 使用C语言链接

mysql的基础&#xff0c;我们之前已经学过&#xff0c;后面我们只关心使用 要使用C语言连接mysql&#xff0c;需要使用mysql官网提供的库&#xff0c;大家可以去官网下载 我们使用C接口库来进行连接 要正确使用&#xff0c;我们需要做一些准备工作&#xff1a; 保证mysql服务有…

python常用库学习-Matplotlib使用

文章目录 安装 Matplotlib导入库基本示例1. 绘制简单的线图2. 散点图3. 柱状图4. 直方图5. 子图 更多高级功能1. 自定义样式2. 文本和注释3. 保存图形 示例&#xff1a;使用 Matplotlib 绘制多个图表示例 1: 绘制多个线图示例 2: 绘制散点图和直方图 参考文献 Matplotlib 是 Py…

MySQL数据库安装(详细)—>Mariadb的安装(day21)

该网盘链接有效期为7天&#xff0c;有需要评论区扣我&#xff1a; 通过网盘分享的文件&#xff1a;mariadb-10.3.7-winx64.msi 链接: https://pan.baidu.com/s/1-r_w3NuP8amhIEedmTkWsQ?pwd2ua7 提取码: 2ua7 1 双击打开安装软件 本次安装的是mariaDB&#xff0c;双击打开mar…

移动UI:成就勋章页面该如何设计,用例子说明。

移动应用的UI成就勋章页面通常是一个展示用户在应用中取得成就和获得勋章的页面。这种页面通常用于激励用户参与应用的活动&#xff0c;增加用户的参与度和忠诚度。 UI设计成就勋章页面时&#xff0c;一般会包括以下元素和功能&#xff1a; 1. 勋章列表&#xff1a; 展示用户…

集成电路学习:什么是ARM先进精简指令集计算机

ARM&#xff1a;先进精简指令集计算机 ARM先进精简指令集计算机&#xff08;Advanced RISC Machine&#xff0c;简称ARM&#xff09;是一种基于精简指令集计算机&#xff08;RISC&#xff09;原则的计算机处理器架构&#xff0c;由英国的ARM公司开发。这种架构以其低功耗和高性…

git创建本地分支并track跟踪远程分支

git创建本地分支并track跟踪远程分支 查看本地分支与远程分支的映射关系&#xff1a; git branch -vv 查看远程都有什么分支&#xff1a; git branch -r 在本地自动新建一个xxx分支&#xff0c;且自动track跟踪远程的同名xxx分支&#xff1a; git checkout --track origin/xx…