2023年第十四届蓝桥杯大赛软件类省赛C/C++大学A组真题

2023年第十四届蓝桥杯大赛软件类省赛C/C++大学A组部分真题和题解分享

文章目录

  • 蓝桥杯2023年第十四届省赛真题-平方差
    • 思路题解
  • 蓝桥杯2023年第十四届省赛真题-更小的数
    • 思路题解
  • 蓝桥杯2023年第十四届省赛真题-颜色平衡树
    • 思路题解
  • 蓝桥杯2023年第十四届省赛真题-买瓜
    • 思路题解

蓝桥杯2023年第十四届省赛真题-平方差

题目描述
给定 L, R,问 L ≤ x ≤ R 中有多少个数 x 满足存在整数 y,z 使得 x = y2 − z2。
输入格式
输入一行包含两个整数 L, R,用一个空格分隔。
输出格式
输出一行包含一个整数满足题目给定条件的 x 的数量。
样例输入
1 5
样例输出
4
提示
1 = 12 − 02 ;
3 = 22 − 12 ;
4 = 22 − 02 ;
5 = 32 − 22 。
对于 40% 的评测用例,LR ≤ 5000 ;
对于所有评测用例,1 ≤ L ≤ R ≤ 109 。

思路题解

解题思路:

  • 规律:只有当x为奇数或4的倍数时才能拆分为两个数的平方差。
    注意事项:
  • 刚开始用c++写循环的时候,有一个样例会超时,故进一步寻找规律:F(X)=x/4+(x+1)/2,该式代表不大于x的满足条件的数的个数,用F®-F(L-1)即为L-R之间(大于等于L,小于等于R)满足条件的数的个数。
#include<iostream>
using namespace std;
int F(int x) {return x / 4 + (x + 1) / 2;//不大于x的满足条件的数的个数
}
int main() {int l = 0, r = 0;cin >> l >> r;cout << F(r)-F(l-1);return 0;
}

蓝桥杯2023年第十四届省赛真题-更小的数

题目描述
在这里插入图片描述
输入格式
输入一行包含一个长度为 n 的字符串表示 num(仅包含数字字符 0 ∼ 9),
从左至右下标依次为 0 ∼ n − 1。
输出格式
输出一行包含一个整数表示答案。
样例输入
210102
样例输出
8
提示
一共有 8 种不同的方案:
1)所选择的子串下标为 0 ∼ 1 ,反转后的 numnew = 120102 < 210102 ;
2)所选择的子串下标为 0 ∼ 2 ,反转后的 numnew = 012102 < 210102 ;
3)所选择的子串下标为 0 ∼ 3 ,反转后的 numnew = 101202 < 210102 ;
4)所选择的子串下标为 0 ∼ 4 ,反转后的 numnew = 010122 < 210102 ;
5)所选择的子串下标为 0 ∼ 5 ,反转后的 numnew = 201012 < 210102 ;
6)所选择的子串下标为 1 ∼ 2 ,反转后的 numnew = 201102 < 210102 ;
7)所选择的子串下标为 1 ∼ 4 ,反转后的 numnew = 201012 < 210102 ;
8)所选择的子串下标为 3 ∼ 4 ,反转后的 numnew = 210012 < 210102 ;

对于 20% 的评测用例,1 ≤ n ≤ 100 ;
对于 40% 的评测用例,1 ≤ n ≤ 1000 ;
对于所有评测用例,1 ≤ n ≤ 5000 。在这里插入图片描述

思路题解

解题思路:

中心思想:s[l] > s[r]则满足条件,答案的个数+1。

详细解释:考虑s的所有子串[l,r], l即left,是子串的起始下标,r即right是子串的末尾下标,判断s[l] 和 s[r]的大小关系:

  • 若s[l] > s[r]则该子串反转后,新串<原串,满足条件,答案数+1;

  • 若s[l] = s[r]则将子串区间[l,r]缩小为[l+1,r-1],再判断s[l+1]和s[r-1]的大小关系;

  • 若s[l] < s[r]则该子串反转后,新串>原串,不满足条件。

注意事项:

  • 注意l和r的取值范围(详见代码注释)。
#include<iostream>
#include<string>
using namespace std;
string s;
int F(int l, int r) {while (l < r) {if (s[l] > s[r])return 1;//如果s[l] > s[r],反转后满足条件 新字符串<原字符串。else if (s[l] == s[r]) { l++;r--; }//如果s[l] == s[r],两边同时缩小区间。else break;//如果s[l] < s[r],不用继续考虑,反转后一定不满足条件,直接退出循环}return 0;
}
int main(){cin >> s;int n = s.length();//n是字符串长度int ans = 0;//记录答案for (int l = 0;l <= n - 2;l++) {//l即left是子串的起始下标,从0开始到n-2(子串长度至少为2,最右侧的最小子串下标为[n-2,n-1],故l最多到n-2)for (int r = n - 1;r > l;r--) {//r即right是子串的末尾下标,从s的最末下标n-1到l+1。if(F(l,r))ans++;}}cout << ans;return 0;
}

蓝桥杯2023年第十四届省赛真题-颜色平衡树

题目描述
给定一棵树,结点由 1 至 n 编号,其中结点 1 是树根。树的每个点有一个颜色 Ci。
如果一棵树中存在的每种颜色的结点个数都相同,则我们称它是一棵颜色平衡树。
求出这棵树中有多少个子树是颜色平衡树。
输入格式
输入的第一行包含一个整数 n ,表示树的结点数。
接下来 n 行,每行包含两个整数 Ci , Fi,用一个空格分隔,表示第 i 个结点的颜色和父亲结点编号。
特别地,输入数据保证 F1 为 0 ,也即 1 号点没有父亲结点。保证输入数据是一棵树。
输出格式
输出一行包含一个整数表示答案。
样例输入
6
2 0
2 1
1 2
3 3
3 4
1 4
样例输出
4
提示
编号为 1, 3, 5, 6 的 4 个结点对应的子树为颜色平衡树。
对于 30% 的评测用例,n ≤ 200,Ci ≤ 200 ;
对于 60% 的评测用例,n ≤ 5000,Ci ≤ 5000 ;
对于所有评测用例,1 ≤ n ≤ 200000,1 ≤ Ci ≤ 200000,0 ≤ Fi < i 。

思路题解

思路:

  • 要判断每个子树是否为平衡树,需要统计子树的每种颜色的节点的数量,并判断所有数量是否相等。

  • 对于一颗树的根节点,若该树的所有子树的统计结果都得到了,就可以直接将子树的统计结果累加,并加上根节点的颜色。因此可以使用dfs对树进行搜索,在后序遍历位置得到子树的统计结果并累加,就可以计算出该树的统计结果,判断所有颜色数量是否相等即可。

注意:

  • 统计结果cnt使用数组时,需要判断整颗树所有颜色的数量,而部分子树的颜色并不包含所有的颜色,每次判断的时间复杂度为O(num_c),num_c为整棵树的颜色种数,这样会超时。因此可以使用map数据结构,这样每次只需判断子树所包含的颜色。
#include<iostream>
#include<vector>
#include<cstring>
#include<map>
using namespace std;
const int N = 2e5+1;
//最终结果
int ans=0;
//将子树的计数结果cnt_nb累加到根节点的结果cnt上
void add(map<int,int>& cnt,map<int,int>& cnt_nb){for(auto entry:cnt_nb){int c=entry.first,count = entry.second;cnt[c] += count;}
}
/*
对树进行dfs搜索,树的根节点为i,并返回该子树的各节点颜色计数结果
*/
map<int,int> dfs(vector<int>* g,int* c,int i){int sz = g[i].size();map<int,int> cnt; //记录子树的每个节点的各颜色节点的数量/*如果为叶子节点,直接返回*/if(sz==0){ cnt[c[i]] = 1; ans++; return cnt;}/*如果不是叶子节点*///将根节点的颜色加入cntcnt[c[i]]=1;//遍历根节点的所有子树,并将子树的计数结果累加到cnt中for(int j=0;j<sz;j++){int nb = g[i][j];map<int,int> cnt_nb = dfs(g,c,nb);add(cnt,cnt_nb);} //判断该子树的各种颜色节点的数量是否相等int count = cnt[c[i]];for(auto entry:cnt){//存在一种颜色数量不等,直接返回if(entry.second != count) return cnt; }//各颜色的数量相等,结果+1ans++;//返回计数结果return cnt;
}
int main()
{int n;cin>>n;vector<int> g[N]; int c[N]; //每个节点的颜色for(int i=0;i<n;i++){int f;cin>>c[i]>>f;if(f>=1){g[f-1].push_back(i); //记录节点f的子节点i(节点编号从0开始)}}dfs(g,c,0);cout<<ans;return 0;
}

蓝桥杯2023年第十四届省赛真题-买瓜

题目描述
小蓝正在一个瓜摊上买瓜。瓜摊上共有 n 个瓜,每个瓜的重量为 Ai 。
小蓝刀功了得,他可以把任何瓜劈成完全等重的两份,不过每个瓜只能劈一刀。
小蓝希望买到的瓜的重量的和恰好为 m 。
请问小蓝至少要劈多少个瓜才能买到重量恰好为 m 的瓜。如果无论怎样小蓝都无法得到总重恰好为 m 的瓜,请输出 −1 。
输入格式
输入的第一行包含两个整数 n, m,用一个空格分隔,分别表示瓜的个数和小蓝想买到的瓜的总重量。
第二行包含 n 个整数 Ai,相邻整数之间使用一个空格分隔,分别表示每个瓜的重量。
输出格式
输出一行包含一个整数表示答案。
样例输入
3 10
1 3 13
样例输出
2
提示
对于 20% 的评测用例,∑n≤10;
对于 60% 的评测用例,∑n≤20;
对于所有评测用例,1 ≤n≤30,1≤ Ai ≤ 109 ,1 ≤ m ≤ 109

思路题解

对于每一个瓜有三种选择:
1)买整个瓜
2)买半个瓜,需要增加劈瓜次数
3)不买

则可以使用深度优先搜索解决, 对每个瓜的三种选择进行搜索, 解空间树是一颗完全三叉树, 时间复杂度为O(3^n), 肯定会超时, 故需要进行剪枝。

买半个瓜时需要将重量除2,会产生小数,故可以将重量数组都乘2,最大重量也乘2。

搜索时需要记录三个状态,当前层数pos,当前总重量sum,当前劈瓜的次数cnt,以下情况需要剪枝:
1)当前劈瓜次数大于已求得的最小次数,即cnt>ans
2)当前重量之和大于要求的重量,即sum>m

但是这样仍然会超时,还可以将重量数组降序排列,使得更快剪枝。还可以创建一个重量数组的后缀数组suf,这样在搜索时可以利用其剪枝:若当前重量加上剩余的所有瓜重量之和小于要求的重量,剪枝。

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 30; 
int INF = 100;
int n,m;
int v[N]; //重量数组
long suf[N+1]; //重量数组的后缀数组
int ans = INF; //将结果初始化为INF
/*
dfs搜索,参数分别表示当前层数,当前重量之和,切瓜的次数
*/
void dfs(int pos,long sum,int cnt){if(sum==m){ //找到了一个结果ans = min(ans,cnt);return;}//剪枝if(pos>=n || cnt>=ans || sum>m || sum+suf[pos]<m) return;//对三种选择进行搜索dfs(pos+1,sum+v[pos],cnt); dfs(pos+1,sum+v[pos]/2,cnt+1);dfs(pos+1,sum,cnt);
}
int main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>m;m*=2; //总重量乘2for(int i=0;i<n;i++) cin>>v[i],v[i]*=2;sort(v,v+n,greater<int>());for(int i=n-1;i>=0;i--) suf[i] = suf[i+1]+v[i];dfs(0,0,0);if(ans==INF) cout<<-1;else cout<<ans;return 0;
}

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

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

相关文章

springcloud和基础服务的搭建以及封装

代码仓库地址&#xff1a;https://github.com/zhaoyiwen-wuxian/springcloud-common page分页也进行了封装&#xff0c;只需要添加到pom中&#xff0c;将会自动进行分页&#xff0c;并且后端不需要写任何的分页数据。只需要前端自己传分页参数即可&#xff0c;并且里面封装了很…

Neoverse S3 系统 IP:机密计算和多芯片基础设施 SoC 的基础

第三代Neoverse系统IP Neoverse S3 产品推出了我们的第三代基础设施特定系统 IP&#xff0c;这是下一代基础设施 SOC 的理想基础&#xff0c;适用于从 HPC 和机器学习到 Edge 和 DPU 的各种应用。S3 机箱专注于为我们的合作伙伴提供 Chiplet、机密计算等关键创新以及 UCIe、DD…

2024.03.01作业

1. 基于UDP的TFTP文件传输 #include "test.h"#define SER_IP "192.168.1.104" #define SER_PORT 69 #define IP "192.168.191.128" #define PORT 9999enum mode {TFTP_READ 1,TFTP_WRITE 2,TFTP_DATA 3,TFTP_ACK 4,TFTP_ERR 5 };void get_…

每日一题——LeetCode1572.矩阵对角线元素的和

方法一 遍历矩阵 如果矩阵中某个位置&#xff08;x,y&#xff09;处于对角线上&#xff0c;那么这个位置必定满足&#xff1a; xy 或 xy len-1 &#xff08;len为矩阵长度&#xff09; var diagonalSum function(mat) {let len mat.length;let sum 0;for (let i 0; i …

智慧运维是什么,智能建筑设施运维管理系统怎么样

推进数字化转型。数字化转型是中小企业向专业化、信息化发展的必由之路。通过引进先进的信息技术和管理系统&#xff0c;公司应加大对数字技术的投入&#xff0c;提高生产流程、成本和效率&#xff0c;提高企业的竞争力。 操作界面的简单易用性 综合页面设计简单明了&#xff…

构建安全的REST API:OAuth2和JWT实践

引言 大家好&#xff0c;我是小黑&#xff0c;小黑在这里跟咱们聊聊&#xff0c;为什么REST API这么重要&#xff0c;同时&#xff0c;为何OAuth2和JWT在构建安全的REST API中扮演着不可或缺的角色。 想象一下&#xff0c;咱们每天都在使用的社交媒体、在线购物、银行服务等等…

Stable Diffusion 模型分享:AAM XL (Anime Mix)(动漫截屏风格 XL)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 AAM XL (Anime Mix) 是一个动漫截屏风格的模型&#xff0c;是 AAM - AnyLoRA Anime Mix 模…

手撕Java集合之简易版Deque(LinkedList)

在目前&#xff0c;许多互联网公司的面试已经要求能手撕集合源码&#xff0c;集合源码本身算是源码里比较简单的一部分&#xff0c;但是要在面试极短的10来分钟内快速写出一个简易版的源码还是比较麻烦的&#xff0c;很容易出现各种小问题。所以在平时就要注重这方面的联系。 以…

第二十一周周报

文献阅读&#xff1a;Recent Advances of Monocular 2D and 3D Human Pose Estimation: A Deep Learning Perspective 摘要&#xff1a;在本文中&#xff0c;作者提供了一个全面的 2d到3d视角来解决单目人体姿态估计的问题。首先&#xff0c;全面总结了人体的二维和三维表征。…

【JavaEE进阶】CSS选择器的常见用法

CSS选择器的主要功能就是选中页面指定的标签元素&#xff0c;选中了元素&#xff0c;才可以设置元素的属性。 CSS选择器主要有以下几种: 标签选择器类选择器id选择器复合选择器通配符选择器 接下来用代码来学习这几个选择器的使用。 <!DOCTYPE html> <html lang&q…

047 内部类

成员内部类用法 /*** 成员内部类** author Admin*/ public class OuterClass {public void say(){System.out.println("这是类的方法");}class InnerClass{public void say(){System.out.println("这是成员内部类的方法");}}public static void main(Stri…

TDengine 在 DISTRIBUTECH 分享输配电数据管理实践

2 月 27-29 日&#xff0c;2024 美国国际输配电电网及公共事业展&#xff08;DISTRIBUTECH International 2024&#xff09;在美国-佛罗里达州-奥兰多国家会展中心举办。作为全球领先的年度输配电行业盛会&#xff0c;也是美洲地区首屈一指的专业展览会&#xff0c;该展会的举办…

基于springboot+vue的智能学习平台系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

蓝桥杯备战刷题three(自用)

1.合法日期 #include <iostream> #include <map> #include <string> using namespace std; int main() {map<string,int>mp;int days[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};for(int i1;i<12;i){for(int j1;j<days[i];j){string sto_strin…

嵌入式烧录报错:板端IP与PC的IP相同

报错&#xff1a; 配置 实际上我配置并没有错。 服务器IP&#xff08;就是本机&#xff09;、板端IP、网关。此处网关必须与板子IP配套&#xff08;可以不存在&#xff09;。 解决 我网卡配置了多个IP。一番删除添加还是报错。 于是点击服务器IP&#xff0c;换成别的&#x…

【Redis | 第一篇】快速了解Redis

文章目录 1.快速了解Redis1.1简介1.2与其他key-value存储的不同处1.3Redis安装——Windows环境1.3.1下载redis1.3.2启动redis1.3.3进入redis客户端1.3.4修改配置 1.4Redis安装——Linux环境1.4.1安装命令1.4.2启动redis1.4.3进入redis客户端 1.5配置修改1.6小结 1.快速了解Redi…

SpringBoot系列(一):SpringBoot介绍

SpringBoot系列(一)&#xff1a;SpringBoot介绍 1. SpringBoot介绍 SpringBoot是由Pivotal团队提供的一套用于构建微服务的基础框架&#xff0c;它旨在简化Spring应用程序的创建和开发过程。 SpringBoot通过设计大量的自动化配置等方式来简化Spring原有样板化的配置&#xff…

MyBatis-Plus 快速入门

介绍 j​​​​​MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 官网&#xff1a;MyBatis-Plus (baomidou.com) 1.…

【硬件工程师面经整理13_电容电阻电感等效电路】

1 电容/电阻/电感的等效电路 ①电容的等效电路是由一个电容和一个电阻组成的&#xff0c;其中电阻称为ESR&#xff08;Equivalent Series Resistance&#xff0c;等效串联电阻&#xff09;。在真实情况下&#xff0c;一个电容会被表示成由“一个电容一个电阻一个电感”组合而成…

electron-release-server部署electron自动更新服务器记录

目录 一、前言 环境 二、步骤 1、下载上传electron-release-server到服务器 2、宝塔新建node项目网站 3、安装依赖 ①npm install ②安装并配置postgres数据库 ③修改项目配置文件 ④启动项目 ⑤修改postgres的认证方式 ⑥Cannot find where you keep your Bower p…