蓝桥杯第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组题解

1.幸运数

题目链接:0幸运数 - 蓝桥云课 (lanqiao.cn)

#include<bits/stdc++.h>
using namespace std;
bool deng(string& num){int n = num.size();int qian = 0,hou = 0;for(int i=0;i<n/2;i++) qian += (num[i]-'0');for(int i=n/2;i<n;i++) hou += (num[i]-'0');return qian == hou;
}
int main()
{// 请在此输入您的代码// int ans = 0;// for(int i=1;i<=100000000;i++){//   string num = to_string(i);//   if(num.size()%2==0){//     if(deng(num))//       ans++;//   }// }cout<<4430091<<endl;return 0;
}

2.有奖问答

题目链接:0有奖问答 - 蓝桥云课 (lanqiao.cn) 

这段代码使用动态规划(DP)来解决一个特定的问题,涉及到一系列的题目,每道题目答对可以获得10分,答错分数归零。目标是计算所有可能的得分方式中,最终得分为70分的总方案数。下面是代码的逐行解释:

  1. int dp[31][100]; 这行代码声明了一个二维数组 dp,其中 dp[i][j] 用于存储在完成第 i 题后,累计得分为 j 的所有可能的方案数。数组的大小为31行(考虑到0到30题)和100列(考虑到分数从0到90,每10分一个区间)。

  2. int res=0; 初始化结果变量 res,这个变量将用来存储所有得分为70的方案总数。

  3. dp[1][0]=dp[1][10]=1; 设置初始条件,表示第一题答错和答对的方案数都是1。这是动态规划的基础,从这些初始条件开始,可以计算出后续所有的情况。

  4. 循环 for(int i=2 ; i<=30 ; i++) 遍历从第2题到第30题的每一题。

  5. 内层循环 for(int j=0 ; j<=90 ; j+=10) 遍历所有可能的得分情况,即0到90分(每隔10分遍历一次)。这里不包括100分,因为题目设定中,一旦得分达到100分,游戏/测试就会结束。

  6. if(j==0) 这个条件处理的是第 i 题答错的情况,即得分归零的情况。在这种情况下,dp[i][0](即在第 i 题后得分为0的方案数)等于在完成第 i-1 题后所有可能得分(0到90分,每隔10分)的方案数之和。

  7. else 部分处理的是第 i 题答对的情况。在这种情况下,如果在第 i-1 题后得分为 j-10,则在第 i 题答对后,得分会变为 j。因此,dp[i][j] 等于 dp[i-1][j-10]

  8. if(j == 70) res+=dp[i][j]; 如果在第 i 题后得分为70分,则将这些方案数加到 res 上,因为题目要求计算所有得分为70分的方案数。

最终,通过动态规划填充 dp 数组,所有得分为70分的方案数被累加到 res 中。最后,cout<<res; 输出这个总方案数。这种使用动态规划的方法高效地遍历了所有可能的答题方案,计算出了满足条件的总方案数。

#include<bits/stdc++.h>
using namespace std;
int dp[31][100];
int main(){int res = 0;dp[1][0] = dp[1][10] = 1;for(int i=2;i<=30;i++){for(int j=0;j<=90;j+=10){if(j==0){for(int k=0;k<=90;k+=10)dp[i][0] += dp[i-1][k];}else{dp[i][j] = dp[i-1][j-10];if(j==70) res+=dp[i][j];}}}cout<<res<<endl;return 0;
}

3.平方差

题目链接:0平方差 - 蓝桥云课 (lanqiao.cn)

居然还有负的输入数据,居然还有大整数乘大整数!

死活过不了的代码,开摆:

#include<bits/stdc++.h>
using namespace std;
vector<int> add(vector<int> &A, vector<int> &B) {vector<int> C;int t = 0;for (int i = 0; i < A.size() || i < B.size(); i++) {if (i < A.size()) t += A[i];if (i < B.size()) t += B[i];C.push_back(t % 10);t /= 10;}if (t > 0) C.push_back(t);  // 处理最后的进位return C;
}
bool cmp(vector<int> &A,vector<int> &B){if(A.size()!=B.size()) return A.size()>B.size();for(int i=A.size()-1;i>=0;i--){if(A[i]!=B[i]) return A[i]>B[i];}return true;
}
vector<int> sub(vector<int> &A,vector<int> &B){vector<int> C;int t = 0;for(int i=0;i<A.size();i++){t = A[i] - t;if(i<B.size()) t-=B[i];C.push_back((t+10)%10);if(t<0) t = 1;else t = 0;}while(C.size()>1&&C.back()==0) C.pop_back();return C;
}
vector<int> mul(vector<int>& A, vector<int>& B) {vector<int> C(A.size() + B.size(), 0);  // 乘积的最大可能位数为两乘数位数之和// 逐位相乘for (size_t i = 0; i < A.size(); ++i) {for (size_t j = 0; j < B.size(); ++j) {C[i + j] += A[i] * B[j];  // 累加到对应的位置}}// 处理进位int carry = 0;for (size_t i = 0; i < C.size(); ++i) {C[i] += carry;carry = C[i] / 10;C[i] %= 10;}// 移除前导0while (C.size() > 1 && C.back() == 0) {C.pop_back();}return C;
}int main()
{// 请在此输入您的代码string a;string b;cin>>a;cin>>b;vector<int> A,B,add_C,sub_C,mul_C;for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');add_C = add(A,B);bool flag = false;if(cmp(A,B)) sub_C = sub(A,B);else{flag = true;sub_C = sub(B,A);}sub_C = sub(A,B);mul_C = mul(add_C,sub_C);if(flag) cout<<"-";for(int i=mul_C.size()-1;i>=0;i--) cout<<mul_C[i];return 0;
}

4.更小的数

题目链接:0更小的数 - 蓝桥云课 (lanqiao.cn)

思路:双层循环遍历所有情况,外层枚举起点,内层枚举终点,查看反转当前字符串能否使得结果更小。

#include<bits/stdc++.h>
using namespace std;
int seek(string s,int i,int j){if(j-i<3) return 0;if(s[i+1]>s[j-1]) return 1;else if(s[i+1]==s[j-1]) return seek(s,i+1,j-1);else return 0;
}
int main()
{// 请在此输入您的代码string s;cin>>s;int n = s.size();int ans = 0;for(int i=0;i<=n-2;i++){for(int j=i+1;j<=n-1;j++){if(s[i] > s[j]) ans++;if(s[i] == s[j]) ans += seek(s,i,j);}}cout<<ans<<endl;return 0;
}

5.颜色平衡树

题目链接:0颜色平衡树 - 蓝桥云课 (lanqiao.cn)

考场上打死我也做不出来,略。

6.买瓜

题目链接:0买瓜 - 蓝桥云课 (lanqiao.cn)

思路:dfs,枚举三种情况,不选当前瓜,选当前瓜的一半,选当前瓜。代码妙在将需要求的目标和每个瓜的值先乘2,免去了整除的尴尬。还使用了倒着的前缀和来剪枝。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,ans = 50;
ll m,a[50],sum[50];
void dfs(ll S,int i,int cnt){if(cnt>=ans) return;if(S==m) ans = cnt;if(i>n||S>m||S+sum[i]<m) return;dfs(S,i+1,cnt);dfs(S+a[i],i+1,cnt);dfs(S+a[i]/2,i+1,cnt+1);
}
int main(){cin>>n>>m;m<<=1;for(int i=0;i<n;i++){cin>>a[i];a[i]>>=1;}sort(a,a+n,greater<>());for(int i=n-1;i>=0;i--){sum[i] = sum[i+1] + a[i];}dfs(0,0,0);if(ans==50){cout<<-1<<endl;}else{cout<<ans<<endl;}return 0;
}

7.网络稳定性

题目链接:0网络稳定性 - 蓝桥云课 (lanqiao.cn)

什么是LCA,不会。

8.异或和之和

题目链接:0异或和之和 - 蓝桥云课 (lanqiao.cn)

完全不会啊。

#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N], cnt[25][5], n; //cnt[i][j]: 第i位j的个数
long long ans;int main()
{scanf("%d", &n);for(int i = 1; i <= n; i++){scanf("%d", &a[i]);//异或前缀和a[i] ^= a[i - 1];}//[i, j]的异或和 = a[j] ^ a[i - 1],因为 a ^ b = c,a ^ c = bfor(int i = 1; i <= n; i++)for(int j = i; j <= n; j++)ans += a[j] ^ a[i - 1];//下面就是优化这个步骤// //遍历二进位每一位// for(int i = 0; i <= 20; i++)//   //遍历每一个数,j=0就是左右区间相等的情况//   for(int j = 0; j <= n; j++)//     cnt[i][(a[j] >> i) & 1]++;// //乘法原理,把所有情况乘起来// for(int i = 0; i <= 20; i++){//   ans += (long long)cnt[i][0] * cnt[i][1] * (1 << i);// }printf("%lld", ans);return 0;
}

9.像素放置

题目链接:0像素放置 - 蓝桥云课 (lanqiao.cn)

极少的能看懂的代码。

#include<bits/stdc++.h>
using namespace std;
int f[12][12];
char d[12][12];
int n,m;
bool check(int x,int y){if(d[x][y]=='_') return true;int cnt = 0;for(int i=-1;i<=1;i++){for(int j=-1;j<=1;j++){cnt+=f[x+i][y+j];}}if(cnt==d[x][y]-'0')return true;return false;
}
void dfs(int x,int y){if(x==n+1){for(int y=1;y<=m;y++){if(!check(n,y))return;}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cout<<f[i][j];}cout<<endl;}return;}if(y==m){f[x][y] = 0;if(x==1 || (y==1 && check(x-1,y)) || (check(x-1,y-1) && check(x-1,y)))dfs(x+1,1);f[x][y] = 1;if(x==1 || (y==1 && check(x-1,y)) || (check(x-1,y-1) && check(x-1,y)))dfs(x+1,1);}else{f[x][y] = 0;if(x==1 || y==1 || check(x-1,y-1))dfs(x,y+1);f[x][y] = 1;if(x==1 || y==1 || check(x-1,y-1))dfs(x,y+1);}
}
int main()
{// 请在此输入您的代码cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>d[i][j];}}dfs(1,1);return 0;
}

10.翻转硬币

题目链接:0翻转硬币 - 蓝桥云课 (lanqiao.cn)

完全不会。

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

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

相关文章

数据库体系概述:详述其基本概念、多样分类、关键作用及核心特性

数据库是一个用于存储、管理和检索数据的系统&#xff0c;它按照特定的数据结构和模式组织数据&#xff0c;确保数据的一致性、安全性和高效访问。以下是关于数据库的详细介绍&#xff1a; 介绍&#xff1a; 数据库&#xff08;Database, DB&#xff09;是一个长期存储在计算…

ubuntu 设置时区

设置东八区&#xff08;UTC8&#xff09; timedatectl set-timezone Asia/Shanghai2.修改/etc/default/locale&#xff0c;设置24小时制 LC_TIMEen_DK.UTF-8执行tzselect&#xff0c;在国内选择亚洲 Asia确认之后选择中国&#xff08;China)接着选择北京(Beijing)最后选择(Ye…

算法汇总啊

一些常用算法汇总 算法思想-----数据结构动态规划(DP)0.题目特点1.【重点】经典例题(简单一维dp&#xff09;1.斐波那契数列2.矩形覆盖3.跳台阶4.变态跳台阶 2.我的日常练习汇总(DP)1.蓝桥真题-----路径 算法思想-----数据结构 数据结构的存储方式 : 顺序存储(数组) , 链式存储…

1.docker

Docker 是一种容器化平台&#xff0c;可以在不同的操作系统中轻松运行和管理应用程序。它使用容器技术来打包应用程序及其所有依赖关系&#xff0c;使其可以在任何环境中运行。 Docker 的基本概念包括以下几个部分&#xff1a; 镜像&#xff08;Image&#xff09;&#xff1a;…

RTX RTOS操作实例分析之---邮箱(mailbox)

0 Preface/Foreword 1 邮箱&#xff08;mailbox&#xff09; 1.1 mailbox ID定义 static osMailQId app_mailbox NULL; 1.2 定义mailbox结构体变量 #define osMailQDef(name, queue_sz, type) \ static void *os_mail_p_##name[2]; \ const char mail_##name[] #name; \ con…

conda创建虚拟环境太慢,Collecting package metadata (current_repodata.json): failed

(省流版&#xff1a;只看加粗红色&#xff0c;末尾也有哦) 平时不怎么用conda&#xff0c;在前公司用服务器的时候用的是公司的conda源&#xff0c;在自己电脑上直接用python创建虚拟环境完事儿&#xff0c;所以对conda的配置并不熟悉~~【狗头】。但是python虚拟环境的最大缺点…

U盘属性0字节,数据恢复全攻略

U盘&#xff0c;这个我们日常生活中常用的数据存储工具&#xff0c;有时却会突然显示出“属性0字节”的诡异状况。面对这种突如其来的故障&#xff0c;许多用户都感到束手无策&#xff0c;甚至误以为数据已经彻底丢失。那么&#xff0c;U盘属性0字节究竟是怎么回事&#xff1f;…

Linux学习 - 文件内容操作

Linux学习 - 文件内容操作 常用的文件内容操作有文件压缩解压缩、文件大小行数统计、文件内容查询等。 gzip: 压缩文件; gunzip: 解压缩文件 # gzip -c 把压缩的文件输出到标准输出 (一般是屏幕) # > 输出重定向&#xff0c;输出写入文件ctehbio:~/ehbio_project$ gzip -…

OpenCV 使用freetype在图像上写中文

​​​​​​ #include "opencv2/opencv.hpp" #include "opencv2/freetype.hpp"static cv::Ptr<cv::freetype::FreeType2> getFreeType() {static cv::Ptr<cv::freetype::FreeType2> ft2;if (ft2.empty()){ft2 cv::freetype::createFreeType…

小红书商业IP变现策略与实操经验分享

一、个人介绍与背景 1. 创业者背景 作为连续创业者&#xff0c;我创立了树叶有光品牌&#xff0c;并在多个领域有所涉猎&#xff0c;如人生陪跑师、财富卡点爆破师等。这些多重身份让我在创业过程中积累了丰富的经验和独特的视角。 二、小红书账号运营经验 1. 运营成果 经…

Ubuntu 22.04安装新硬盘并启动时自动挂载

方法一 要在Ubuntu 22.04系统中安装一个新硬盘、对其进行格式化并实现启动时自动挂载&#xff0c;需要按以下步骤操作&#xff1a; 1. 安装硬盘 - 确保你的硬盘正确连接到计算机上&#xff08;涉及硬件安装&#xff09;。 2. 发现新硬盘 - 在系统启动后&#xff0c;打开终端…

30天拿下Rust之实战Web Server

概述 随着互联网技术的飞速发展&#xff0c;Web服务器作为承载网站与应用的核心组件&#xff0c;其性能、稳定性和安全性都显得至关重要。Rust语言凭借其独特的内存安全保证、高效的性能以及丰富的生态系统&#xff0c;成为了构建现代Web服务器的理想选择。 新建项目 首先&…

c++类设计

C++ 中的类(Class)是一种用户自定义的数据类型,用于封装数据和函数成员。它是面向对象编程(OOP)的基本概念之一,用于实现抽象数据类型(ADT)和对象的行为。 设计C++类的成员变量和成员函数通常需要考虑以下几个方面: 封装性(Encapsulation):类的成员变量应该被定义…

适合户外运动的开放式耳机选哪款?五款开放式耳机推荐

开放式蓝牙耳机由于其开放式设计&#xff0c;适合在户外运动、工作场所等需要保持警觉的场合使用。在户外活动中&#xff0c;能够听到周围环境的声音对于安全和警惕性非常重要。同时&#xff0c;这种耳机在运动或工作时不容易产生不适感&#xff0c;也不会阻碍佩戴者与他人的交…

高等数学基础篇(数二)之二重积分(解析版)

二重积分&#xff1a; 一、二重积分的概念及性质 1.二重积分的概念 2.二重积分的性质 二、二重积分的计算 1.利用直角坐标计算 2.利用极坐标计算 3.利用函数的奇偶性计算 4.利用变量的轮换对称性计算 目录 一、二重积分的概念及性质 1.二重积分的概念 2.二重积分的性…

如何确定开多少个线程合适

任务性质&#xff1a;首先要明确任务的性质&#xff0c;是CPU密集型、IO密集型还是混合型。对于CPU密集型任务&#xff0c;线程数通常不宜过多&#xff0c;以免过多的上下文切换导致性能下降&#xff1b;对于IO密集型任务&#xff0c;可以适当增加线程数以充分利用等待IO的时间…

ubuntu 23 安装maven

要在 Ubuntu 23 系统上安装 Maven&#xff0c;请遵循以下步骤&#xff1a; **1. ** 确保已安装 Java Development Kit (JDK): Maven 需要 Java 环境才能运行。确认您的系统已经安装了 JDK 8 或更高版本。如果尚未安装&#xff0c;可以通过以下命令安装 OpenJDK&#xff1a; s…

活动图高阶讲解-15

1 00:00:00,000 --> 00:00:07,200 目前来说&#xff0c;这个菱形到底是分还是合 2 00:00:07,200 --> 00:00:13,600 这个是靠入边出边的数量来判断的 3 00:00:13,600 --> 00:00:22,560 有的方法学&#xff0c;它可能会这样搞一些花样 4 00:00:22,560 --> 00:00:2…

Transformer架构的核心公式类似于数学期望并不复杂,但为什么这个模型这么强呢?

Transformer是一个利用注意力机制来提高模型训练速度的模型&#xff0c;因其适用于并行化计算以及本身模型的复杂程度使其在精度和性能上都要高于之前流行的循环神经网络。 一、Transformer模型整体结构 标准的Transformer结构如下图所示&#xff0c;是一个编码器-解码器架构…

Policy Gradient-优化动作选择函数

昨天收到一个新的订阅通知,很是欣喜,感谢订阅同学的支持。 还以为这个专栏没有人关注了呐,一直也没什么兴趣更新。 为了回馈大家的支持,继续更新一篇。 今天写一下强化学习力的 Policy Gradient,这个之前的时候一直不太懂了,回头看确实蛮简单的。 1、Policy Gradient…