2022年第十三届蓝桥杯题解(全)C/C++
A题就是一个简单的进制转化,代码实现如下:
#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int main()
{int x = 2022;int a = 1;int res = 0;while(x) {res += (x % 10) * a;a = a * 9;x /= 10;}cout << res;return 0;
}
B题有很大的争议,我认为顺子的意思是从0开始的至少为三个数的升序序列。那这样的话答案就是:14
C题是一个很普通的思维题,先记录一下每周能做多少题,然后统计一下总的做题数除以每周能做的题然后乘以7,再加上从周一开始计算每一天什么时候能大于这个总的题数的天数即可。
#include <bits/stdc++.h>using namespace std;
typedef long long LL;const int N = 1e5 + 10;int main()
{LL a, b, n, t, res;cin >> a >> b >> n;t = a * 5 + b * 2;res = n / t * 7;n %= t;if(n > 0)for(int i = 1; i <= 7; i ++ ){if(i == 6 || i == 7) n -= b;else n -= a;res ++;if(n <= 0) break;}cout << res;return 0;
}
D题应该是最简单的一道,开一个n的数组a[i],a[i]表示每一个灌木能长得最大高度,最大高度等于它右侧的树木数乘以2;
#include <bits/stdc++.h>using namespace std;
typedef long long LL;const int N = 1e4 + 10;int a[N], n;int main()
{cin >> n;for(int i = 1; i <= (n + 1) / 2; i ++ ) {a[i] = (n - i) * 2;a[n - i + 1] = a[i];}for(int i = 1; i <= n; i ++ ) {cout << a[i];if(i != n) cout << "\n";}return 0;
}
E题就开始有点意思了,这道题是一个简单贪心,重点在于读题(其实接触过这个进制问题的童鞋应该一样就看懂了emmm)。
我们先分析一下题干的65是怎么出来的:第一数位每一个数代表的必然是1,第二数位是由第一数位的二进制晋上来的,所以第二数位每一个数代表的是2,第三数位是由第二数位十进制进位上来的,所以第三数位每一个数代表的是2 * 10 = 20,所以这个x(321) = 3 * 20 + 2 * 2 + 1 * 1 = 65;
题目的意思是保证x(a) >= x(b) , 求两个数的差值最小。显然对于每一数位,其进制越小,两个数的后一数位做差所得到的值越小,所以每一数位最小的合法进制数就行。
#include <bits/stdc++.h>
#define int long longusing namespace std;const int mod = 1e9 + 7, N = 1e5 + 10;int a[N], b[N];
int ma, mb, n;signed main()
{cin >> n;cin >> ma;for(int i = 1; i <= ma; i ++ ) cin >> a[i];for(int i = 1; i <= ma / 2; i ++ ) swap(a[i], a[ma - i + 1]);cin >> mb;for(int i = 1; i <= mb; i ++ ) cin >> b[i];for(int i = 1; i <= mb / 2; i ++ ) swap(b[i], b[mb - i + 1]); int t = 1, ans = 0;//枚举每个数位for(int i = 1; i <= ma; i ++ ) {//当前数位贪心最优的进制 int z = max(a[i], b[i]) + 1;if(z < 2) z = 2; ans += a[i] * t - b[i] * t;ans %= mod;t = t * z % mod;}cout << ans;return 0;
}
F题可以暴力写一下,求一个前缀和,然后枚举子矩阵,时间复杂度是O(n^4), 显然过不了;
这个题考的是一个双指针,枚举一下矩阵中的左右边界,在每一个左右边界中,从上往下求一下子段中小于等于k的数的数量(用双指针扫一下就可以,这一步可以做到o(n));
时间复杂度:O(n ^ 3)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(fast)
#include <bits/stdc++.h>using namespace std;const int N = 510;
typedef long long LL;int a[N][N];int main()
{int n, m, k;scanf("%d%d%d", &n, &m, &k);for(int i = 1; i <= n; i ++ )for(int j = 1; j <= m; j ++ )scanf("%d", &a[i][j]);for(int i = 1; i <= n; i ++ )for(int j = 1; j <= m; j ++ )a[i][j] += a[i][j - 1];LL cnt = 0;for(int i = 1; i <= m; i ++ )for(int j = i; j <= m; j ++ ) {int res = 0;for(int l = 1, r = 1; r <= n; r ++ ) {res += a[r][j] - a[r][i - 1];while(res > k && l <= r) {res -= a[l][j] - a[l][i - 1];l ++;}if(res <= k && l <= r) cnt += r - l + 1;} }printf("%lld", cnt);return 0;
}
这个题考的是一个dp;
状态表示: f[i][j]表示前i列积木中,第i列状态为j的情况数。
四种情况:j = 0, 表示当前列为空, 1表示当前列上面有一个格子,2表示当前列下面有一个格子,3表示当前列已满。
由于数据很大,开一个4e8的空间会爆,可以用p来表示上一层状态,q来表示当前层的状态,类似于背包的滚动数组优化。
状态转移看一下代码吧,我感觉还是比较好理解的,不懂的可以评论区问我
#include <bits/stdc++.h>using namespace std;
typedef long long LL; const int N = 1e7 + 10, mod = 1e9 + 7;LL p[4], q[4];int main()
{int n;cin >> n;p[3] = 1;for(int i = 1; i <= n; i ++ ) {q[3] = (p[0] + p[1] + p[2] + p[3]) % mod;q[0] = p[3] % mod;q[1] = (p[0] + p[2]) % mod;q[2] = (p[0] + p[1]) % mod;for(int i = 0; i <= 3; i ++ )p[i] = q[i];}cout << p[3];return 0;
}
ps:题不可以用并查集去做,因为雷的爆炸是由方向的,A雷爆炸可以引爆B雷,但是B雷爆炸是有可能无法引爆B雷的(爆炸半径不同)
ps:我补题的时候被卡常卡了一天,最后把idx.find改成idx.count就过了(emm55555)
正解是dfs,为了避免边被卡成O(n * n), 以至于tle,我们就需要去除重复的点,记录每一个坐标下点的位置.
然后把每一个火箭作为根节点,去遍历周围r ^ 2的雷,统计一下一共能炸多少雷就可以。
O(100 * n + m)最坏情况为每一个雷有100条边;
#pragma GCC optimize(2)
#include <bits/stdc++.h>using namespace std;
typedef long long LL;const int N = 2e5 + 10;struct Node {int x, y, r, l;
}a[N];
//x,y到下标的映射
unordered_map<LL, int> idx;
bool st[N];
int n, m, cnt;
int ans;LL cal(int x, int y) {return (LL)x * (1000000000 + 1) + y;
}bool solve(int x, int y, int r) {if(x * x + y * y <= r * r) return true;else return false;
}void dfs(int i)
{//标记当前点st[i] = true;//加上当前点雷的数量ans += a[i].l;int r = a[i].r;//printf("%d %d %d\n", a[i].x, a[i].y, a[i].r);//遍历当前点周围是否有没遍历的子节点,有的话继续dfsfor(int x = max(a[i].x - r, 0); x <= min(a[i].x + r, 1000000000); x ++ ) {for(int y = max(a[i].y - r, 0); y <= min(a[i].y + r, 1000000000); y ++ ) {if(solve(x - a[i].x, y - a[i].y, r)) {LL xy = cal(x, y);if(idx.count(xy)) {int u = idx[xy];if(!st[u]) {dfs(u);//printf("%d\n", u);}}}}}}int main()
{scanf("%d%d", &n, &m);for(int i = 1; i <= n; i ++ ) {int x, y, r;scanf("%d%d%d", &x, &y, &r);LL xy = cal(x, y);//如果没有这个点if(idx.find(xy) == idx.end()) {//将这个点存入idx数组idx[xy] = ++cnt; //将这个点存入a数组a[cnt] = {x, y, r, 1};}else {int u = idx[xy];//这个点已经存在并且半径更大,则会更新这个以前点的编号下的r的值a[u].r = max(a[u].r, r);//这个点的出现次数加一++ a[u].l;}//int u = idx[xy];//printf("%d %d %d %d\n", a[u].x, a[u].y, a[u].r, a[u].l);}for(int i = 1; i <= m; i ++ ) {int x, y, r;scanf("%d%d%d", &x, &y, &r);//将这个点加入a中作为起始点,去搜一下其他的雷a[cnt + 1] = {x, y, r};dfs(cnt + 1);}printf("%d", ans);return 0;
}
I题又是一个dp,这个dp感觉比上面那个简单一点;
状态表示:f[i][j][k]表示访问前i个位置时,恰好访问j个店并且酒量恰好为k的时候的方案数;
准确来说这个做法并不能维护所有前i个位置恰好访问j个店的方案数,但是题目只问最后一次遇到花且恰好把酒喝光的次数,所以对于大于100的酒量的状态就不用转移了,因为在后面接近100个位置中,全看花也不能把酒喝完。
状态转移; 看花 : f[i][j][k] = f[i - 1][j][k + 1] 遇店 : f[i][j][k] = f[i - 1][j - 1][k / 2];//注意边界!不要越界
#include <bits/stdc++.h>using namespace std;const int N = 110, mod = 1e9 + 7;//前i次访问,访问j个店的酒量是多少
long long f[N * 2][N][110];int main()
{int n, m;scanf("%d%d", &n, &m);f[0][0][2] = 1;for(int i = 1; i < n + m; i ++ )for(int j = 0; j <= n; j ++ )for(int k = 0; k <= 100; k ++ ) {f[i][j][k] = (f[i][j][k] + f[i - 1][j][k + 1]) % mod;if((k % 2 == 0) && j) f[i][j][k] = (f[i][j][k] + f[i - 1][j - 1][k / 2]) % mod;}printf("%lld", f[n + m - 1][n][1]);return 0;
}
这个题有两个做法,一种是用set或者堆来维护一个高度到区间的映射,另一个用并查集维护区间,这个做法我没做出来,我用了两个set来做,果然被卡常了.
正解:这个题本质是一个最长公共下降子序列的问题,对于任意一个h,只要它高度降到了与前一个高度下降过程中的公共值,那么它就不需要花费代价继续下降。如果它降得的当前高度与前一个高度没有公共值,则需要多花费一个代价,来降低自己的高度。我们只需要开两个数组暴力做一下就行。
时间复杂度: O(n);
#include <bits/stdc++.h>using namespace std;
typedef long long LL;const int N = 2e5 + 10;LL a[N];
vector<LL> b[N];
int n;LL solve(LL x) {return sqrt(x / 2 + 1);
}int main() {scanf("%d", &n);for(int i = 1; i <= n; i ++ ) scanf("%lld", &a[i]);int res = 0;for(int i = 1; i <= n; i ++ ) {while(a[i] > 1) {int flag = 0;for(LL j : b[i - 1]) {if(a[i] == j) {flag = 1;break;}}if(!flag) res ++;b[i].push_back(a[i]);a[i] = solve(a[i]);}}printf("%d", res);return 0;
}
相关文章:

2022年第十三届蓝桥杯题解(全)C/C++
A题就是一个简单的进制转化,代码实现如下: #include <bits/stdc.h>using namespace std;const int N 1e5 10;int main() {int x 2022;int a 1;int res 0;while(x) {res (x % 10) * a;a a * 9;x / 10;}cout << res;return 0; } B题有…...
【cmake学习】find_package 详解
find_package 主要用于查找指定的 package,主要支持两种搜索方法: Config mode:查找 xxx-config.cmake或 xxxConfig.cmake的文件,如OpenCV库的OpenCVConfig.cmakeModule mode:查找Findxxx.cmake文件,如Ope…...

WEB攻防-通用漏洞PHP反序列化POP链构造魔术方法原生类
目录 一、序列化和反序列化 二、为什么会出现反序列化漏洞 三、序列化和反序列化演示 <演示一> <演示二> <演示二> 四、漏洞出现演示 <演示一> <演示二> 四、ctfshow靶场真题实操 <真题一> <真题二> <真题三> &l…...
Baumer工业相机堡盟工业相机如何通过BGAPISDK里的图像处理库进行图像转换(C++)
Baumer工业相机堡盟工业相机如何通过BGAPI SDK进行图像转换(C)Baumer工业相机Baumer工业相机的SDK里图像格式转换的技术背景Baumer工业相机通过BGAPI SDK进行图像转换调用BGAPI SDK的图像转换库ImageProcessor调用BGAPI SDK建立图像调用BGAPI SDK转换图像…...
JD开放平台接口(获得JD商品详情, 按关键字搜索商品,按图搜索京东商品(拍立淘), 获得店铺的所有商品,获取推荐商品列表, 获取购买到的商品订单列表)
参数说明 通用参数说明 url说明 https://api-gw.onebound.cn/平台/API类型/ 平台:淘宝,京东等, API类型:[item_search,item_get,item_search_shop等]version:API版本key:调用key,测试key:test_api_keysecret:调用secret,测试secret:(不用填写…...

上海亚商投顾:沪指震荡反弹 游戏、传媒概念股再度大涨
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪大小指数今日走势分化,沪指向上震荡反弹,创业板指一度跌近1%,黄白二线大幅背离。…...
C/C++ 玩转StoneValley库:从入门到精通
C/C 玩转StoneValley库:从入门到精通引言(Introduction)StoneValley库简介(Overview of StoneValley Library)为什么要学习StoneValley库(Why Learn StoneValley Library in C)StoneValley库安装…...

CentOS7-部署Tomcat并运行Jpress
1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8,配置服务启动脚本,部署jpress应用。1、简述静态网页和动态网页的区别 静态网页: 请求响应信息,发给客户端进行处理,由浏览器进…...
菜鸟程序员的3年心酸逆袭之旅!今天你对我爱搭不理,明天我让你高攀不起!
多年前我以一个菜鸟的身份 进入了一家创业公司 我原本以为公司是这样的 但是实际上是这样的 我进去时 我们部门除开部门老大还有我 也只有我 所以我就这样开始了我的程序员生涯 开始了我的苦逼技术 公司是做电商网站的 因为我是一个菜鸟 所以我接到的第一个任务 就是做一个网页…...
【Scala】异常 隐式转换 泛型
目录 异常 隐式转换 隐式函数 隐式参数 隐式类 隐式解析机制 泛型 泛型上下限 上下文限定 来源: 异常 def main(args: Array[String]): Unit {try {var n 10 / 0}catch {case ex: ArithmeticException>{// 发生算术异常println("发生算术异常&quo…...

1673_MIT 6.828 Homework xv6 lazy page allocation要求翻译
全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 在计划表中看到了这样一份作业,做一个简单的翻译整理。原来的页面:Homework: xv6 lazy page allocation (mit.edu) 家庭作业:x…...

六、Locust之TaskSets详解
TaskSets是一种结构化测试分层网站/系统的方法。你可以在这里阅读更多关于它的信息。 1.TaskSet class 如果你正在对一个以分层方式构建的网站进行性能测试,有章节和子章节,以同样的方式构建你的负载测试可能是有用的。 为了这个目的&#x…...
flask_知识点3_css
flask_知识点3_css样式1高度和宽度2行内和块级3字体和颜色4文字对齐方式5浮动6 内边距6 外边距!css重点1、css样式2、分析页面布局3、参考别人的成果css引用方式1 在标签上(不建议使用)// An highlighted block var foo bar;2 在head标签中写…...

Redis_概述_特性_IO模型
本章要点 掌握NoSql数据库的概念和与sql数据库的区别初步了解Redis内存数据库了解Redis内存数据库的优点及其原因掌握Redis的多线程IO模型学习Redis的安装和配置 Redis简介 Redis 全称 Remote Dictionary Server 远程字典服务! 使用C语言编写,支持网络,可基于内存也可以持久化…...

[论文速览] Sparks of Artificial General Intelligence: Early experiments with GPT-4
Sparks of Artificial General Intelligence: Early experiments with GPT-4 2023.3.22 微软官方发布了目前人类史上最强AI模型 GPT-4 的综合能力评估论文,总所周知,2023年是通用人工智能(Artificial General Intelligence,AGI&a…...

舔狗日记:学姐生日快到了,使用Python把她的照片做成视频当礼物
舔狗日记1前言一、需要调入的模块二、实现合并多张图片转成 mp4 视频三、优化改进一下总结前言 这不是学姐生日快到了,于是我学了一手使用Python来把学姐的照片生成为视频,到时候给她一个惊喜! 好了先不舔了,下面分享一下用pytho…...
从《移动互联网应用程序(App)收集使用个人信息自评估指南》看个人信息保护着力点
为指导应用运营者对自身收集、使用个人信息行为进行自查自纠,2019年3月,应用专项治理工作组发布了《应用违法违规收集使用行为自查自查指南》。个人信息”。随着对App违法收集、使用个人信息行为评价工作的开展和深入,《App违法违规收集、使用…...

电脑0x0000001A蓝屏错误怎么U盘重装系统教学
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作&…...

Day939.如何小步安全地升级数据库框架 -系统重构实战
如何小步安全地升级数据库框架 Hi,我是阿昌,今天学习记录的是关于如何小步安全地升级数据库框架的内容。 当消息组件的数据存储都是采用 SQL 拼写的方式来操作,这样不便于后续的扩展及维护。除此之外,相比前面的其他重构&#x…...

2023 年十大 API 管理趋势
作者郑玩星,API7.ai 技术工程师。 阅读原文 什么是 API?什么是 API 管理? 近期,AIGC(AI Generated Content,生成式人工智能)在各行业的应用日趋普及。AIGC 服务提供商通过 API 向外部提供其内…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...