25 C++蓝桥杯B组题解

news/2026/1/16 19:41:54/文章来源:https://www.cnblogs.com/habur/p/19491928

25 C++蓝桥杯B组题解

移动距离

题目大意:小明初始在二维平面的原点 (0,0),他想前往坐标 (233,666)。

现在他有两种移动策略:

  1. 水平向右移动,即沿着 x 轴正方向移动一定的距离。
  2. 沿着一个圆心在原点 (0,0)、以他当前位置到原点的距离为半径的圆的圆周移动,移动方向不限(即顺时针或逆时针移动不限)。

【题解】:由于仅仅在水平方向的移动策略仅有 1 ,所以第一步显然只能执行 1 操作,最优操作一定是一次 1 操作然后一次 2 操作。

画板

code:

#include <iostream>
#include <math.h>using namespace std;int main()
{double r = sqrt(233 * 233 + 666 * 666);double si = atan(666 * 1.0 / 233);cout << (int)(r + r * si + 0.5) << endl;return 0;
}

客流量上限

题目大意:求 1 - 2025 的排列,满足以下条件:

对于认为位置 i,j $ i \le j $,选的数为 $ A_i,A_j
\(,\) $$ A_i * A_j \le ij + 2025 $。的排列的数量。

【题解】:由于对于一个 i ,j 的取值很多,这种题目暴力搜索显然是不可以的,就去尝试用题目给定的条件去缩小范围。

  1. 对于 i = j 的情况,$ A_i^2 \le i^2 + 2025 $-> $ A_i \le \sqrt{i^2 + 2025} $,其中 $ A_i $为整数。对于这个条件我们可以去进一步缩小 $ A_i $ 的取值情况。$ $
int main()
{for(int i = 1; i <= 2025; i++){cout << i << " " << (int)sqrt(i * i + 2025) << endl; }return 0;
}

我们会发现,在 $ i \ge 1013 \(,\) A_i \le i \(,此时我们把数分为两部分:\) i < 1013 \(,\) i > 1013 \(。根据上述结论,在\) i \ge 1013 \(的时候,由于前 1012 个数已经把数都用完了,对于这部分 i ,\) A_i = i $。

  1. 现在我们来讨论 $ i \le 1012 $ 的情况,这一部分的取值需要进一步去明确,我们取 $ i \le 1012, j \ge 1013 $。

-> $ A_i * j \le i * j + 2025 $ -> $ A_i \le i + \frac{2025}{j} = i+ 1 $。

  • 对于 $ i= 1,A_i \le 2 $-> 两种选择方案;
  • 对于 $ i= 2,A_i \le 3 $-> 两种选择方案;
  • 对于 $ i= 3,A_i \le 4 $-> 两种选择方案;

.... -> $ ans = 2^{1012} %MOD $

code:

#include <iostream>
#include <cmath>using namespace std;
typedef long long LL;
const LL MOD = 1e9 + 7;LL qpow(LL a, LL b)
{LL ret = 1;while(b){if(b & 1) ret = ret * a % MOD;b >>= 1;a = a * a % MOD;}return ret;
}int main()
{cout << qpow(2, 1012) << endl;return 0;
}

可分解的正整数

题目大意:问一个正整数序列能够分解的数的个数,其中分解规则如下:
  1. 分解成的序列长度要大于等于 3.
  2. 且分解的序列中的数字是连续递增的整数(可以为负数).

【题解】:显然对于一个非 1 的数都可以分解成 该数 + 一个和为 0 的递增前缀(-2 -1 0 1 2 3)。可以证明 1 不可分解。

code:

#include <iostream>using namespace std;int main()
{int n; cin >> n;int ans = 0;for(int i = 1; i <= n; i++){int x; cin >> x;if(x != 1) ans++;}cout << ans << endl;return 0;
}

产值调整

题目大意:对于给定三个初始值 A, B, C,问执行 k 次操作后最后的 A, B, C。

每次操作: $ A^{'} = \frac{B + C}{2} $$ B^{'} = \frac{A + C}{2} $$ C^{'} = \frac{A + B}{2} $。

【题解】:我们可以模拟整个过程,但是 k 很大,会超时,发现在不断平均的过程中,A,B,C 最后会很快趋于一个定值,可以在模拟的时候判断一下。

#include <iostream>using namespace std;
typedef long long LL;void solve()
{LL a, b, c; cin >> a >> b >> c;LL k; cin >> k;while(k--){LL A = (b + c) / 2;LL B = (a + c) / 2;LL C = (a + b) / 2;if(A == a && B == b && C == c){break;}a = A;b = B;c = C;}````markdown<h1 id="zLLjO"><font style="color:#000000;">移动距离</font></h1>题目大意:<font style="color:rgb(36, 41, 46);">小明初始在二维平面的原点 (0,0),他想前往坐标 (233,666)。</font><font style="color:rgb(36, 41, 46);">现在他有两种移动策略:</font>1. <font style="color:rgb(36, 41, 46);">水平向右移动,即沿着 x</font>_<font style="color:rgb(36, 41, 46);"></font>_<font style="color:rgb(36, 41, 46);"> 轴正方向移动一定的距离。</font>2. <font style="color:rgb(36, 41, 46);">沿着一个圆心在原点 (0,0)、以他当前位置到原点的距离为半径的圆的圆周移动,移动方向不限(即顺时针或逆时针移动不限)。</font><font style="color:rgb(36, 41, 46);">【题解】:由于仅仅在水平方向的移动策略仅有 1 ,所以第一步显然只能执行 1 操作,最优操作一定是一次 1 操作然后一次 2 操作。</font>![画板](https://cdn.nlark.com/yuque/0/2026/jpeg/50035730/1767859147648-69670d48-c810-4f82-9f49-5cac106206e8.jpeg)code:```cpp#include <iostream>#include <math.h>using namespace std;int main(){double r = sqrt(233 * 233 + 666 * 666);double si = atan(666 * 1.0 / 233);cout << (int)(r + r * si + 0.5) << endl;return 0;}```<h1 id="VBMxn"><font style="color:#000000;">客流量上限</font></h1>题目大意:求 1 - 2025 的排列,满足以下条件:对于位置 i, j <script type="math/tex">i \le j</script>,选的数为 <script type="math/tex">A_i, A_j</script>,且 <script type="math/tex">A_i A_j \le i j + 2025</script> 的排列的数量。【题解】:由于对于一个 i ,j 的取值很多,这种题目暴力搜索显然是不可以的,就去尝试用题目给定的条件去缩小范围。1. 对于 i = j 的情况,<script type="math/tex">A_i^2 \le i^2 + 2025</script> -> <script type="math/tex">A_i \le \sqrt{i^2 + 2025}</script>,其中 <script type="math/tex">A_i</script> 为整数。对于这个条件我们可以去进一步缩小 <script type="math/tex">A_i</script> 的取值情况。```cppint main(){for(int i = 1; i <= 2025; i++){cout << i << " " << (int)sqrt(i * i + 2025) << endl; }return 0;}```![](https://cdn.nlark.com/yuque/0/2026/png/50035730/1767859786016-110c417a-825b-4e07-a2bd-7c177b8b8f2a.png)我们会发现,在 <script type="math/tex">i \ge 1013</script>,<script type="math/tex">A_i \le i</script>,此时我们把数分為两部分:<script type="math/tex">i < 1013</script>,<script type="math/tex">i > 1013</script>。根据上述结论,在 <script type="math/tex">i \ge 1013</script> 的时候,由于前 1012 个数已经把数都用完了,对于这部分 i,<script type="math/tex">A_i = i</script>。2. 现在我们来讨论 <script type="math/tex">i \le 1012</script> 的情况,这一部分的取值需要进一步去明确,我们取 <script type="math/tex">i \le 1012,\; j \ge 1013</script>。-> <script type="math/tex">A_i j \le i j + 2025</script> -> <script type="math/tex">A_i \le i + \frac{2025}{j} = i + 1</script>。- 对于 <script type="math/tex">i = 1,\; A_i \le 2</script> -> 两种选择方案;- 对于 <script type="math/tex">i = 2,\; A_i \le 3</script> -> 两种选择方案;- 对于 <script type="math/tex">i = 3,\; A_i \le 4</script> -> 两种选择方案;.... -> <script type="math/tex">ans = 2^{1012} \% MOD</script> code:```cpp#include <iostream>#include <cmath>using namespace std;typedef long long LL;const LL MOD = 1e9 + 7;LL qpow(LL a, LL b){LL ret = 1;while(b){if(b & 1) ret = ret * a % MOD;b >>= 1;a = a * a % MOD;}return ret;}int main(){cout << qpow(2, 1012) << endl;return 0;}```<h1 id="asriT">可分解的正整数</h1>题目大意:<font style="color:#000000;">问一个正整数序列能够分解的数的个数,其中分解规则如下:</font>1. 分解成的序列长度要大于等于 3.2. 且分解的序列中的数字是连续递增的整数(可以为负数).【题解】:显然对于一个非 1 的数都可以分解成 该数 + 一个和为 0 的递增前缀(-2 -1 0 1 2 3)。可以证明 1 不可分解。code:```cpp#include <iostream>using namespace std;int main(){int n; cin >> n;int ans = 0;for(int i = 1; i <= n; i++){int x; cin >> x;if(x != 1) ans++;}cout << ans << endl;return 0;}```<h1 id="zswDR">产值调整</h1>题目大意:对于给定三个初始值 A, B, C,问执行 k 次操作后最后的 A, B, C。每次操作:<script type="math/tex; mode=display">A' = \frac{B + C}{2}</script><script type="math/tex; mode=display">B' = \frac{A + C}{2}</script><script type="math/tex; mode=display">C' = \frac{A + B}{2}</script>【题解】:我们可以模拟整个过程,但是 k 很大,会超时,发现在不断平均的过程中,A,B,C 最后会很快趋于一个定值,可以在模拟的时候判断一下。```cpp#include <iostream>using namespace std;typedef long long LL;void solve(){LL a, b, c; cin >> a >> b >> c;LL k; cin >> k;while(k--){LL A = (b + c) / 2;LL B = (a + c) / 2;LL C = (a + b) / 2;if(A == a && B == b && C == c){break;}a = A;b = B;c = C;}cout << a << " " << b << " " << c << endl;}int main(){int t; cin >> t;while(t--) solve();return 0;}```<h1 id="画展布置">**<font style="color:rgb(36, 41, 46);">画展布置</font>**</h1>题目描述:给定一个长度为 n 的序列,从中选出 m 个,最小化这选择的 m 个数的 <script type="math/tex">\sum_{i=1}^{m - 1}\left| B_{i+1}^{2}-B_{i}^{2}\right|</script>。【题解】:显然当序列排序完成后,会包含最优解,此时双指针维护长度为 m 的区间中的上述值。code:```cpp#include <iostream>#include <vector>#include <algorithm>using namespace std;typedef long long LL;int main(){int n, k;cin >> n >> k;k--;vector<LL> a(n + 1);for(int i = 1; i <= n; i++) cin >> a[i];sort(a.begin(), a.end());LL ans = 1e18;LL sum = 0;int l = 2;for(int r = 2; r <= n; r++){sum += a[r] * a[r] - a[r - 1] * a[r - 1];while(r - l + 1 > k) {sum -= a[l] * a[l] - a[l - 1] * a[l - 1];l++;}if(r - l + 1 == k){ans = min(ans, sum);}}cout << ans << endl;return 0;}```<h1 id="lobmT">**<font style="color:rgb(36, 41, 46);">水质检测</font>**</h1>题目描述:在一个 2 * n 的矩形中,有若干连通块,我们需要找到将这些连通块全部联通的最小路径。【题解1】:01 BFS ,连接所有的连通块的最短路径,等于从最左边连通块走到最右边连通块的最短路,这是必然的,因为中途的连通块在最初始的连通块经过连通块的字符所在列的时候必然会联通该连通块。- 当下一个位置是 # 时,路径边权为 0.- 当下一个位置是 . 时,路径边权为 1.code:```cpp#include <iostream>#include <vector>#include <queue>#include <cstring>using namespace std;const int N = 1e6 + 10;int dist[2][N];deque<pair<int, int>> dq;char g[2][N];int n;int dx[] = {0, 0, 1, -1};int dy[] = {1, -1, 0, 0};int bfs(int i, int j){dist[i][j] = 0;dq.push_back({i, j});int ans = 0;while(dq.size()){auto [x, y] = dq.front(); dq.pop_front();for(int k = 0; k < 4; k++){int nx = x + dx[k];int ny = y + dy[k];if(nx < 0 || nx >= 2 || ny < 0 || ny >= n) continue;if(g[nx][ny] == '#') ans = max(ans, dist[nx][ny]);if(dist[nx][ny] != -1) continue;if(g[nx][ny] == '#') {dist[nx][ny] = dist[x][y];dq.push_front({nx, ny});}else {dist[nx][ny] = dist[x][y] + 1;dq.push_back({nx, ny});}}}return ans;}int main(){cin >> g[0] >> g[1];n = strlen(g[0]);memset(dist, -1, sizeof dist);for(int j = 0; j < n; j++){if(g[0][j] == '#'){cout << bfs(0, j) << endl;return 0;}if(g[1][j] == '#'){cout << bfs(1, j) << endl;return 0;}}return 0;}```````

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

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

相关文章

强烈安利9个AI论文写作软件,本科生轻松搞定毕业论文!

强烈安利9个AI论文写作软件&#xff0c;本科生轻松搞定毕业论文&#xff01; AI 工具让论文写作不再难 在当前的学术环境中&#xff0c;越来越多的本科生开始借助 AI 工具来提升论文写作效率。这些工具不仅能够帮助学生快速生成内容&#xff0c;还能有效降低 AIGC 率&#xff0…

2026年Nature重磅研究:告别快速出成果的执念,让AI成为拓展科学边界的伙伴!

AI在学术科研中发挥的潜能,几乎已成为共识,如处理文献更快、写作效率更高、技术门槛更低...... 但矛盾也随之而来,那便是:个体科研效率在提升,真正具有颠覆性的科学突破,却在减少。 清华大学与芝加哥大学这两个研究团队,正是从这一矛盾出发,在Nature上发表了题为《Ar…

2026年GEO开源源码哪家好?优质源头仓库推荐 - 源码云科技

2026年GEO开源源码哪家好?优质源头仓库推荐2026年AI搜索浪潮席卷营销领域,GEO优化已然成为企业精准引流获客的核心抓手,而选对靠谱的GEO优化源码,直接决定了GEO优化排名的效果与运营成本。市面上各类GEO优化服务商…

0x3f第33天复习 (16;45-18:00)

子串基础前缀和思考和为k的子数组思考两数之和思考接雨水思考三数之和ac思考字母异位词分组ac思考最长连续序列ac思考移动零ac思考无重复字符的最长子串ac思考找到字符串中所有字母异位词ac思考滑动窗口最大值1min ac思考最小覆盖子串1min ac思考思考买卖股票的最佳时机1min ac…

彻底搞懂HTTP,从零基础入门到精通,收藏这一篇就够了!

彻底搞懂HTTP HTTP发展史 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是用于在互联网上传输超文本&#xff08;如网页&#xff09;的应用层协议。 最早版本0.9 仅用于简单的文档浏览&#xff0c;功能极其有限。 正式版本1.0 引入…

2026年诚信的温州团建包车,温州大巴包车,温州包车公司实力推荐榜 - 品牌鉴赏师

引言在当今社会,包车服务在团建、商务出行等场景中扮演着愈发重要的角色。温州作为充满商业活力与旅游魅力的城市,包车市场也日益繁荣。为了给消费者提供客观、真实、公正的包车公司选择依据,我们依据相关参考资料,…

保姆级教程!1 位数码管 0-9 循环展示(附长杂版 + 极致精简版代码)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

AL_ControlInd代码注释

///////////////////////////////////////////////////////////////////////////////////////// /**\param alControl 请求的新的状态\param alStatusCode 请求的状态码\brief 这个函数处理EtherCAT状态机。它被调用* 在AL控制时间发生&#xff08;0x220的位0&…

使用Beyond Compare5.0+的方法

很多文章都提了用某个keygen脚本 但是没提要先改windows系统下的bc.exe 这里摘录了一位大佬的方法。原文链接&#xff1a; https://github.com/garfield-ts/BCompare_Keygen?tabreadme-ov-file 下载的脚本在这里&#xff1a; https://github.com/garfield-ts/BCompare_Ke…

【2026】超详细BurpSuite安装保姆级教程,Burp Suite的基本介绍及使用,收藏这一篇就够了

【2026】超详细Burp Suite安装保姆级教程&#xff0c;Burp Suite的基本介绍及使用&#xff0c;收藏这一篇就够了 一、简介 Burpsuite 是用于攻击 web 应用程序的集成平台。它包含了许多 Burp 工具&#xff0c;这些不同的 Burp 工具通过协同工作&#xff0c;有效的分享信息&am…

Hadoop_Spark背后的CAP定理:大数据框架设计哲学

Hadoop/Spark背后的CAP定理&#xff1a;大数据框架设计哲学关键词&#xff1a;CAP定理、分布式系统、一致性、可用性、分区容错性、Hadoop、Spark摘要&#xff1a;本文将带你走进分布式系统的"三角困境"——CAP定理&#xff0c;用生活中的小故事和大数据框架&#xf…

性价比高的厌氧池清淤哪个靠谱

厌氧池清淤哪家好&#xff1f;2024年性价比TOP5专业深度测评开篇&#xff1a;行业痛点与测评使命厌氧池作为污水处理的核心设施&#xff0c;其清淤作业直接影响企业环保合规与生产效率。然而&#xff0c;市场上清淤服务商资质参差不齐&#xff0c;价格从每立方几十元到数百元差…

深入解析BPFDoor:利用BPF技术的隐蔽Linux后门

嗨&#xff0c;恶意软件爱好者们&#xff0c; 今天&#xff0c;我将分析一款名为“BPFDoor”的恶意软件。该恶意软件于2022年被发现。 在分析恶意软件之前&#xff0c;别忘了使用虚拟机&#xff0c;并始终记住使用仅主机模式连接。 摘要 BPFDoor 是一款 Linux/Unix 恶意后门程序…

手把手教你用9款AI工具一键生成毕业论文全程指南

一、毕业论文工具选择&#xff1a;9款AI工具核心功能对比表 写论文前最头疼的是“选对工具”——不同工具擅长的环节不同&#xff0c;选错了反而浪费时间。下面这张表格帮你快速定位每个阶段最适合的工具&#xff0c;核心推荐的「鲲鹏智写」会用★标注&#xff0c;方便你重点关…

HTTPS加密与JWT鉴权机制详解

HTTPS加密与JWT鉴权机制详解 1.HTTPS 数据传输加密流程 非对称加密&#xff08;公钥/私钥&#xff09;并不直接用于数据传输 • 直接用公钥加密大量业务数据效率太低&#xff08;RSA、ECC 这种算法比 AES 慢几个数量级&#xff09;。• 实际上&#xff0c;非对称加密只用来 …

OV SSL证书为什么是助力企业网站实现HTTPS加密的优选方案?怎么快速获取?

一、为什么 OV SSL 证书是企业网站实现 HTTPS 加密的优选方案&#xff1f; &#xff08;一&#xff09;核心优势&#xff1a;安全 可信 合规的黄金三角 1. 身份强验证&#xff0c;终结“真假官网”难题 双重审核机制&#xff1a;不同于 DV&#xff08;域名验证&#xff09…

Ubuntu 22.04上的Bitsandbytes模型量化完全指南:从原理到实践 - 实践

Ubuntu 22.04上的Bitsandbytes模型量化完全指南:从原理到实践 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &q…

3月份SSL证书有效期缩短为200天?企业应该如何有效的应对?

一、政策背景与核心解读 政策背景​ 国际标准组织 CA/浏览器论坛&#xff08;CA/Browser Forum&#xff09;通过了《SC-081v3 提案》&#xff0c;决定逐步缩短 SSL/TLS 证书最长有效期&#xff0c;旨在降低私钥泄露风险、加速加密算法迭代&#xff0c;并提升网络安全整体水平。…

网络安全等级保护制度详解,一文掌握核心要点!

网络安全等级保护制度详解&#xff0c;一文掌握核心要点&#xff01;_等级保护相关政策和法律法规 一、等级保护制度发展情况 等级保护制度的法律依据 《计算机信息系统安全保护条例》&#xff08;1994年General Office of the State Council第147号令&#xff09; 公安部主…

全网最全9个一键生成论文工具,继续教育学生轻松搞定毕业论文!

全网最全9个一键生成论文工具&#xff0c;继续教育学生轻松搞定毕业论文&#xff01; AI 工具助力论文写作&#xff0c;轻松应对学术挑战 在当今快速发展的教育环境中&#xff0c;继续教育学生面临着越来越高的学术要求。尤其是在撰写毕业论文时&#xff0c;如何高效完成内容创…