2022年蓝桥杯第十三届CC++大学B组真题及代码
目录
1A:九进制转十进制
2B:顺子日期(存在争议)
3C:刷题统计
解析代码(模拟)
4D:修剪灌木
解析代码(找规律)
5E:X进制减法
解析代码1(模拟)
解析代码2(数学)
6F:统计子矩阵
解析代码(二维前缀和+双指针)
7G:积木画
解析代码(dp+滚动数组)
8H:扫雷
解析代码(待续)
9I:李白打酒加强版
解析代码1(dp)
解析代码2(dp)
10J:砍竹子
解析代码(待续)
1A:九进制转十进制
问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
九进制正整数 (2022)转换成十进制等于多少?
运行限制
-
最大运行时间:1s
-
最大运行内存: 512M
#include <stdio.h>
#include <stdlib.h>int main(int argc, char *argv[])
{// 请在此输入您的代码printf("%d",2+2*9+0+2*9*9*9); // 1478return 0;
}
2B:顺子日期(存在争议)
问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123; 而 20221023 则不是一个顺子日期,它一个顺子也没有。小明想知道在整个 2022 年份中,一共有多少个顺子日期?
运行限制
-
最大运行时间:1s
-
最大运行内存: 256M
#include <stdio.h>
#include <stdlib.h>int main(int argc, char *argv[])
{//直接手算,注意题中第三行,如果012不算就是4个,但答案是14//1230 1231//1123//1012//这些月份都没有:09 08 07 06 05 04 03 02//0120 0121 0122 0123 0124 0125 0126 0127 0128 0129printf("14");return 0;
}
3C:刷题统计
问题描述
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题?
输入格式
输入一行包含三个整数 a,b 和 n.
输出格式
输出一个整数代表天数。
样例输入
10 20 99
样例输出
8
运行限制
-
最大运行时间:1s
-
最大运行内存: 256M
解析代码(模拟)
//#include <bits/stdc++.h>
#include <iostream>
#define endl '\n'
#define int long long
using namespace std;signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int a, b, n, i, week, day;cin >> a >> b >> n;week = n / (a * 5 + b * 2);day = week * 7;n -= (a * 5 + b * 2) * week;for (i = 1; i <= 5; ++i){if (n > 0){n -= a;day++;}}for (i = 1; i <= 2; ++i){if (n > 0){n -= b;day++;}}cout << day << endl;return 0;
}
4D:修剪灌木

解析代码(找规律)
解决本题的关键是判断每棵灌木最高的高度,简单地思考不难发现该高度与该点距离左、右侧边界的距离相关。定义左侧边界距离为 i - 1 ,则右侧边界可计算出为:n − i 。
//#include <bits/stdc++.h>
#include <iostream>
#define endl '\n'
#define int long long
using namespace std;signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n = 0;cin >> n;for (int i = 1; i <= n; ++i){cout << max(i - 1, n - i) * 2 << endl;}return 0;
}
5E:X进制减法


很多同学不会做这道题是因为题目的意思没有理清楚。其实题目的要求很简单:给定了两个整数 A,B,这两个数每一位上可以是任意进制,但是A,B相同位上进制规则相同。举个例子:

- 若 X,Y,Z 分别代表 5,6,2 进制,则 A = 4*6*2 + 2*6 + 1 ,B = 3*6*2 + 5*6 + 0
- 如 X,Y,Z 分别代表 6,7,3 进制,则 A = 4*7*3 + 2*7 + 1 ,B = 3*7*3 + 5*7 + 0
无论每一位进制为何值,都需要满足:
- 进制数要大于改位的最大值
- 进制数的最小值为 2
满足上述要求的每一位进制所得到的数:A,B ,题目要求获取 A - B 的最小值。
解析代码1(模拟)
每一位最小可能得结果:max(a[i] ,b[i]) + 1(再和2取一下max,因为最小为二进制)
#include <iostream> // D题:X 进制减法
#include <algorithm>
#define endl '\n'
#define int long long
using namespace std;
const int mod = 1000000007;
int n, ma, mb, a[100001], b[100001];signed main()
{cin >> n;cin >> ma;for (int i = 1; i <= ma; ++i)cin >> a[i];cin >> mb;for (int i = 1; i <= mb; ++i)cin >> b[i];if (ma > mb) // 高位补0{for (int i = ma; i > ma - mb; --i)b[i] = b[i - (ma - mb)];for (int i = 1; i <= ma - mb; ++i)b[i] = 0;}int res = 0;for (int i = 1; i <= ma; ++i){res *= max(max(a[i], b[i]) + 1, (int)2);res %= mod;res += a[i] - b[i];if (res < 0)res += mod;if (res >= mod)res -= mod;}cout << res;return 0;
}
解析代码2(数学)
平时X进制的数,各位数字的进制是相同的,每位数字的权重是X^n(n为该位数字后面的位数),比如二进制1000中首位的1的权重是2^3=8;但是本题各位数字进制不同,该位数字的权重其实是后面各位数字的进制的乘积。
欲使A-B最小,只需使得各位数字取得合法范围内的最小进制即可,具体做法就是对A和B中相同数位的数字取int tmax = max(a[i], b[i]),该位的合法最小进制即为max(tmax + 1, 2),因为最小进制不能小于2;而对于X进制的数来说,合法的最大数字是X-1,例如8进制中最大数字是7,二进制中最大数字是1。
而求A和B的值,只需要再开一个数组存储各位数字的实际权重,再将各位数字和对应的权重相乘后相加即可。需要注意的是这个题数据比较大,需要多次取模,特别是最后计算最终结果的时候,应(A - B + mod) % mod,否则可能A本来比B大,但是取模后比B小,这样A-B可能会出现负值。
#include <iostream> // X 进制减法
#include <algorithm>
#define endl '\n'
#define int long long
using namespace std;
const int M = 100010, N = 1010, mod = 1000000007;
int a[M], b[M], w[M]; // a[] 存储A各位数字 b[] 存储B各位数字 w[] 存储各位的进制
int n;
int Ma, Mb;
int mul[M]; // 各位数字的实际权重
int A, B;signed main()
{cin >> n; // 最大进制cin >> Ma;for (int i = Ma; i >= 1; --i) cin >> a[i];cin >> Mb;for (int i = Mb; i >= 1; --i) cin >> b[i];int MM = max(Ma, Mb); // A B 中最大的位数for (int i = MM;i >= 1; --i) // 确定各位进制 w[i]{int tmax = max(a[i], b[i]);w[i] = max((int)2, tmax + 1);}mul[1] = 1;for (int i = 2; i <= MM; ++i) // 计算权重mul[i] = w[i - 1] * mul[i - 1] % mod;for (int i = Ma; i >= 1; --i) // 计算AA = (A + a[i] * mul[i]) % mod;for (int i = Mb; i >= 1; --i) // 计算BB = (B + b[i] * mul[i]) % mod;cout << (A - B + mod) % mod << endl;return 0;
}
6F:统计子矩阵

解析代码(二维前缀和+双指针)
如果直接用 前缀和 + 暴力,复杂度将是O(N^4 ),
优化的方法是:枚举子矩阵的 左边界i 和 右边界j,用快指针lower 枚举 子矩阵的下边界,慢指针upper 维护子矩阵的上边界。
如果得到的子矩阵的权值和 大于 k,则慢指针s 前进,而子矩阵和必将单调不增,慢指针继续前进,直到 子矩阵的和 不大于k,慢指针没必要前进了,因为该子矩阵的所有宽度为 j - i + 1 的子矩阵(总共 t - s + 1 种)一定满足要求,更新该情况对答案的贡献 t - s + 1;反之,如果慢指针s越界(s > t),则不操作,直接进入下层循环
#include <iostream>
#define endl '\n'
#define int long long
using namespace std;
const int N = 5e2 + 3;
int n, m, k;
int arr[N][N];signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> m >> k;for (int i = 1; i <= n; ++i){for (int j = 1; j <= m; ++j) // 直接在原数组基础得到前缀和数组{cin >> arr[i][j];arr[i][j] += arr[i - 1][j] + arr[i][j - 1] - arr[i - 1][j - 1];}}int ans = 0;for (int i = 1; i <= m; ++i){for (int j = i; j <= m; ++j){for (int left = 1, right = 1; right <= n; ++right){while (left <= right && arr[right][j] - arr[left - 1][j] - arr[right][i - 1] + arr[left - 1][i - 1] > k)++left;if (left <= right)ans += right - left + 1;}}}cout << ans << '\n';return 0;
}
7G:积木画


解析代码(dp+滚动数组)
#include <iostream> // G题:积木画
#include <cstring>
#define endl '\n'
using namespace std;
#define int long long
const int mod = 1000000007;
int n, v[2][2], dp[2][2];
// 数组第1维表示上一行有没有积木,第二维表示下一行有没有积木,0是没有,1是有
inline void add(int& x, int y)
{x += y;x %= mod;
}signed main()
{cin >> n; // 用例:3dp[0][0] = 1;for (int i = 1; i <= n; ++i) // i表示第i列,{memset(v, 0, sizeof(v));add(v[0][0], dp[0][0]); // 00 能转变为的情况add(v[1][1], dp[0][0]);add(v[0][1], dp[0][0]);add(v[1][0], dp[0][0]);add(v[0][1], dp[1][0]); // 10 能转变为的情况add(v[1][1], dp[1][0]);add(v[1][0], dp[0][1]); // 01 能转变为的情况add(v[1][1], dp[0][1]);add(v[0][0], dp[1][1]); // 11 能转变为的情况memcpy(dp, v, sizeof(dp)); // 把dp给v}cout << dp[0][0];return 0;
}
8H:扫雷

解析代码(待续)
(待续)
9I:李白打酒加强版


解析代码1(dp)
状态表示:本题的解法是动态规划,定义三维数组 dp存储状态,d p [ i ] [ j ] [ k ]表示路上遇到了 i 次店,j 次花后,酒壶中酒剩余 k 斗的方法数。
初始化:初始情况李白没有遇到店、花,初始状态下酒壶中有 2 斗,因此定义 dp [ 0 ] [ 0 ] [ 2 ] = 1 为初始状态。
状态转移方程:
- 如果当前状态遇到一次店,即 i > 0且剩余酒的数量应该是之前的两倍,即 k % 2 == 0,此时 dp [ i ] [ j ] [ k ] + = dp [ i − 1 ] [ j ] [ k / 2 ]
- 如果当前状态遇到一次花,即 j > 0,此时 dp [ i ] [ j ] [ k ] + = dp [ i ] [ j − 1 ] [ k + 1 ],k+1 表示酒被喝掉了一斗。
返回值:因为最后一次遇到的一定是花且剩余酒的数量为 0 ,不妨将状态转换为:共遇到 n次店,m − 1次花且剩余酒的数量为 1,这样返回 dp [ n ] [ m − 1 ] [ 1 ]就是题目所求。
#include <iostream>
#include <cstring>
#define endl '\n'
using namespace std;
const int mod = 1000000007;
const int M = 110;
int dp[M * 2][M][M];signed main()
{memset(dp, 0, sizeof dp); // 0 表示花 1 表示店dp[0][0][2] = 1;int n, m;cin >> n >> m;for (int i = 0; i <= n; ++i){for (int j = 0; j <= m; ++j){for (int k = 0; k <= 101; ++k){if (i == 0 && j == 0)continue;if (i > 0 && !(k & 1)) // 店dp[i][j][k] += dp[i - 1][j][k / 2];if (j > 0) // 花dp[i][j][k] += dp[i][j - 1][k + 1];dp[i][j][k] %= mod;}}}cout << dp[n][m - 1][1];
}
解析代码2(dp)
#include <iostream>
#include <cstring>
#define endl '\n'
using namespace std;
const int mod = 1000000007;
const int M = 110;
int dp[M * 2][M][M];
inline void add(int& x, int y)
{x += y;x %= mod;
}signed main()
{// 第一维是遇到的建筑(店/花),第二维是店,第三维是剩余的酒memset(dp, 0, sizeof dp);dp[0][0][2] = 1;int n, m;cin >> n >> m;for (int i = 1; i <= n + m; ++i) // 第i建筑{for (int j = 0; j <= n; ++j) // 第j个店,i-j 个花{for (int k = 0; k <= m + 1; ++k) // 还有k壶酒{if(dp[i - 1][j][k] != 0){if (j < n)add(dp[i][j + 1][min(k * 2, m + 1)], dp[i - 1][j][k]);if (i - 1 - j < m && k != 0)add(dp[i][j][k - 1], dp[i - 1][j][k]);}}}}cout << dp[n + m - 1][n][1];return 0;
}
10J:砍竹子

解析代码(待续)
(待续)
相关文章:
2022年蓝桥杯第十三届CC++大学B组真题及代码
目录 1A:九进制转十进制 2B:顺子日期(存在争议) 3C:刷题统计 解析代码(模拟) 4D:修剪灌木 解析代码(找规律) 5E:X进制减法 解析代码1&…...
1.oracle修改配置文件
1.找到oracle的安装路径 D:\app\baozi\product\11.2.0\dbhome_1\NETWORK\ADMIN ,修改下面的两个文件。如果提示没有权限,可以先把这两个文件复制到桌面,修改完后,在复制回来。 2.查看自己电脑的主机名, 右击 - 此电脑 …...
通义万相2.1 你的视频创作之路
通义万相2.1的全面介绍 一、核心功能与技术特点 通义万相2.1是阿里巴巴达摩院研发的多模态生成式AI模型,以视频生成为核心,同时支持图像、3D内容及中英文文字特效生成。其核心能力包括: 复杂动作与物理规律建模 能够稳定生成包含人体旋转、…...
Muduo网络库实现 [四] - Channel模块
设计思路 具体来说每一个套接字都会对应一个 Channel 对象,用于对它的事件进行管理。可以对于描述符的监控事件在用户态更容易维护,以及触发事件后的操作流程更加的清晰 Channel模块是用于对一个描述符所需要监控的事件以及事件触发之后要执行的回调函…...
“自动驾驶背后的数学” 专栏导读
专栏链接: 自动驾驶背后的数学 专栏以“自动驾驶背后的数学”为主题,从基础到深入,再到实际应用和未来展望,全面解析自动驾驶技术中的数学原理。开篇用基础数学工具搭建自动驾驶的整体框架,吸引儿童培养兴趣࿰…...
XSS 攻击(详细)
目录 引言 一、XSS 攻击简介 二、XSS 攻击类型 1.反射型 XSS 2.存储型 XSS 3.基于 DOM 的 XSS 4.Self - XSS 三、XSS 攻击技巧 1.基本变形 2.事件处理程序 3.JS 伪协议 4.编码绕过 5.绕过长度限制 6.使用标签 四、XSS 攻击工具与平台 1.XSS 攻击平台 2.BEEF 五…...
K8s负载均衡全解析:从入门到实战的完整指南
Kubernetes(K8s)作为容器编排的标准,其负载均衡机制是构建高可用、高弹性应用的关键。本文将全面介绍K8s负载均衡的核心概念、实现方式及最佳实践,帮助开发者和运维人员构建稳定高效的云原生应用。 一、K8s负载均衡的基础概念 在Kubernetes生态系统中,负载均衡是指将工作负…...
《ZooKeeper Zab协议深度剖析:构建高可用分布式系统的基石》
《ZooKeeper Zab协议深度剖析:构建高可用分布式系统的基石》 一、分布式协调的挑战与ZooKeeper的解决方案 1.1 分布式系统一致性难题 #mermaid-svg-iigak7YlgEw7o6lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-sv…...
OpenCV 图形API(6)将一个矩阵(或图像)与一个标量值相加的函数addC()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 addC 函数将给定的标量值加到给定矩阵的每个元素上。该功能可以用矩阵表达式替换: dst src1 c \texttt{dst} \texttt{src1} \te…...
同步SVPWM调制策略的初步学习记录
最近项目需要用到一些同步调制SVPWM相关的内容(现在的我基本都是项目驱动了),因此对该内容进行一定的学习。 1 同步SVPWM调制的背景 我们熟知的一些知识是:SVPWM(空间矢量脉宽调制)是一种用于逆变器的调制…...
六十天Linux从0到项目搭建(第十五天)(程序替换、exec流程示意图、核心特性)
1 为什么要有程序替换? 程序替换(Process Replacement)是操作系统中一个关键机制,它的核心目的是:让一个正在运行的进程(通常是子进程)停止执行当前代码,转而加载并执行一个全新的程…...
排序算法3-交换排序
目录 1.常见排序算法 2.排序算法的预定函数 2.1交换函数 2.2测试算法运行时间的函数 2.3已经实现过的排序算法 3.交换排序的实现 3.1冒泡排序 3.2快速排序 3.2.1递归的快速排序 3.2.1.1hoare版本的排序 3.2.1.2挖坑法 3.2.1.3lomuto前后指针法 3.2.2非递归版本的快…...
【Qt】数据库管理
数据库查询工具开发学习笔记 一、项目背景与目标 背景:频繁编写数据库查询语句,希望通过工具简化操作,提升效率。 二、总体设计思路 1. 架构设计 MVC模式:通过Qt控件实现视图(UI),业务逻辑…...
Ant Design Vue 中的table表格高度塌陷,造成行与行不齐的问题
前言: Ant Design Vue: 1.7.2 Vue2 less 问题描述: 在通过下拉框选择之后,在获取接口数据,第一列使用了fixed:left,就碰到了高度塌陷,查看元素的样式结果高度不一致,如&#x…...
面经-项目
项目 项目(重点)问题1:描述在网页中题目点击提交后到题目结果出现的一系列后台反应【1】如何获取到用户提交的代码的?【2】_1. 题目细节都有哪些?【2】_2. 题目信息怎么存储的?【3】负载均衡算法的实现?【4】oj_server怎么连接对应的compile_server(编译主机)的?【5】oj_…...
Win10安装Linux的三种方法
通过 Windows 子系统 for Linux(WSL)安装 启用 “适用于 Linux 的 Windows 子系统” 可选功能: 图形界面方式:在【设置 -> 更新与安全 -> 开发者选项】中开启【开发人员模式】;在【程序和功能 -> 启用或关闭…...
【qt】文件类(QFile)
很高兴你能看到这篇文章,同时我的语雀文档也更新了许多嵌入式系列的学习笔记希望能帮到你 : https://www.yuque.com/alive-m4b9n 目录 QFile 主要功能QFile 操作步骤QFile 其他常用函数案例分析及实现功能一实现:打开文件并显示功能二实现:另…...
力扣hot100——最长连续序列(哈希unordered_set)
题目链接:最长连续序列 1、错解:数组做哈希表(内存超出限制) int longestConsecutive(vector<int>& nums) {vector<bool> hash(20000000010, false);for(int i0; i<nums.size();i){hash[1000000000nums[i]]t…...
3. 实战(一):Spring AI Trae ,助力开发微信小程序
1、前言 前面介绍了Spring boot快速集成Spring AI实现简单的Chat聊天模式。今天立马来实战一番,通过Trae这个火爆全网的工具,来写一个微信小程序。照理说,我们只是极少量的编码应该就可以完成这项工作。开撸~ 2、需求描述 微信小程序实现一…...
MySQL高级语句深度解析与应用实践
一、窗口函数:数据分析的利器 1. 窗口函数基础概念 窗口函数(Window Function)是MySQL 8.0引入的强大特性,它可以在不减少行数的情况下对数据进行聚合计算和分析 SELECT employee_name,department,salary,RANK() OVER (PARTITION BY department ORDER…...
SSE服务器主动推送至浏览器客户端,让你不再需要websocket
Server-Sent Events(SSE)是一种服务器向客户端推送实时更新的技术,基于HTTP协议。客户端通过EventSource API来接收事件流,而服务器则保持一个长连接,持续发送数据。这与传统的请求-响应模式不同,允许服务器…...
UE5新材质系统效果Demo展示
1、玉质材质,透明玻璃材质,不同透射和散射。 2、浅水地面,地面层,水层,地面湿度,水面高度,水下扰动,水下浇洒,水下折射 Substrate-Water Substrate-Water-CodeV2...
wps 怎么显示隐藏文字
wps 怎么显示隐藏文字 》文件》选项》视图》勾选“隐藏文字” wps怎么设置隐藏文字 wps怎么设置隐藏文字...
解决 macOS (M1 Pro) 上使用 Vite 进行 Build 打包时 Node 进程内存溢出的问题
解决 macOS (M1 Pro) 上使用 Vite 进行 Build 打包时 Node 进程内存溢出的问题 在搭载 M1 Pro 芯片的 macOS 系统上,使用 Vite 进行项目构建(build)时,您可能会遇到 Node 进程内存溢出的错误。特别是在使用较新版本的 Node.js&am…...
页面重构过程中如何保证良好的跨浏览器一致性?
在页面重构的过程中,为了确保网页能够在不同的浏览器中呈现一致的效果,我们需要采取一系列措施来提高跨浏览器的一致性。以下是几个关键步骤和技术要点: 使用标准化的HTML和CSS:始终遵循最新的Web标准编写代码,例如采用…...
CXL UIO Direct P2P学习
前言: 在CXL协议中,UIO(Unordered Input/Output) 是一种支持设备间直接通信(Peer-to-Peer, P2P)的机制,旨在绕过主机CPU或内存的干预,降低延迟并提升效率。以下是UIO的核心概念及UI…...
leetcode138.随即链表的复制
思路源于 【力扣hot100】【LeetCode 138】随机链表的复制|哈希表 采用一个哈希表,键值对为<原链表的结点,新链表的结点>,第一次遍历原链表结点时只创建新链表的结点,第二次遍历原链表结点时,通过键拿…...
03_MySQL工具介绍
文章目录 一、Navicat for MySQL1.1、安装 二、SQLyog2.1、安装 多数时候使用SQL语句对数据库进行操作不是很方便,特别是在查询操作时,显示的内容不够直观,此时我们需要借助图形化工具对数据库进行操作。 操作MySQL常用的图形工具如下&#x…...
《网络管理》实践环节01:OpenEuler22.03sp4安装zabbix6.2
兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 1 环境 openEuler 22.03 LTSsp4PHP 8.0Apache 2Mysql 8.0zabbix6.2.4 表1-1 Zabbix网络规划(用你们自己的特征网段规划) 主机名 IP 功能 备注 zbx6svr 19…...
Qt Creator 中文 “error: C2001: 常量中有换行符“ 问题解决方法
Qt Creator 编译时出现中文 error: C2001: 常量中有换行符的问题,通常由文件编码与编译器字符集不兼容导致。 一、修改文件编码格式 添加 UTF-8 BOM 签名 在 Qt Creator 中设置:工具 -> 选项 -> 文本编辑器 -> 行为 -> UTF-8 BOM&a…...
