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 向外部提供其内…...

计算机网络微课堂1-3节
目录 1. TCP/TP协议编辑 2. 3.调制解调器 4.因特网的组成 5.电路交换 6.分组交换 重要常用 7.报文交换 8.总结电路交换 报文交换和分组交换 9. 1. TCP/TP协议 2. ISP 网络提供商 ISP的三层 国际 国家 和本地 3.调制解调器 什么是调制解调器,它存在的…...

[Eigen中文文档] Array类与元素操作
文档总目录 本文目录什么是Array类?Array类型访问Array中的值加法与减法Array乘法其他按元素操作的运算array和matrix表达式之间的转换英文原文(The Array class and coefficient-wise operations) 本页旨在提供有关如何使用Eigen的Array类的概述和说明。 什么是A…...

python学习,全球有哪些特别好的社区推荐呢?
Surfshark可以访问全球社区学习的surfshark工具使用方法教程:qptool.net/shark.html 以下是一些全球范围内比较受欢迎的 Python 学习社区: 中文社区:csdn.net 优势:本土国语社区,获得相关知识与经验便利。 Python官…...

LC-1042. 不邻接植花(四色问题(染色法))
1042. 不邻接植花 难度中等198 有 n 个花园,按从 1 到 n 标记。另有数组 paths ,其中 paths[i] [xi, yi] 描述了花园 xi 到花园 yi 的双向路径。在每个花园中,你打算种下四种花之一。 另外,所有花园 最多 有 3 条路径可以进入…...

python实战应用讲解-【numpy科学计算】scikits-learn模块(附python示例代码)
目录 Numpy 安装scikits-learn 准备工作 具体步骤 Numpy 加载范例数据集 具体步骤...

大数据开发必备面试题Spark篇01
1、Hadoop 和 Spark 的相同点和不同点? Hadoop 底层使用 MapReduce 计算架构,只有 map 和 reduce 两种操作,表达能力比较欠缺,而且在 MR 过程中会重复的读写 hdfs,造成大量的磁盘 io 读写操作,所以适合高时…...

SpringBoot整合xxl-job详细教程
SrpingBoot整合xxl-job,实现任务调度说明调度中心执行器调试整合SpringBoot说明 Xxl-Job是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。Xxl-Job有…...

【MySQL--04】数据类型
文章目录1.数据类型1.1数据类型分类1.2数值类型1.2.1tinyint类型1.2.2bit类型1.2.3小数类型1.2.3.1 float1.2.3.2 decimal1.3字符串类型1.3.1 char1.3.2 varchar1.3.3char和varchar的比较1.4日期和时间类型1.5 enum和set1.5.1 enum1.5.2 set1.5.3 示例1.数据类型 1.1数据类型分…...

git 将其它分支的文件检出到工作区
主要是使用如下命令: git checkout [-f|--ours|--theirs|-m|--conflict<style>] [<tree-ish>] [--] <pathspec>…覆盖与 pathspec 匹配的文件的内容。当没有给出<tree-ish> (通常是一个commit)时,用 index 中的内容覆盖工作树…...

人工智能的最大危险是什么?
作者:GPT(AI智学习) 链接:https://www.zhihu.com/question/592107303/answer/2966857095 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 首先:人工智能为人类带来了很多益处&…...