当前位置: 首页 > news >正文

第十四届蓝桥杯省赛C++B组题解

考点

暴力枚举,搜索,数学,二分,前缀和,简单DP,优先队列,链表,LCA,树上差分

A 日期统计

暴力枚举:

#include<bits/stdc++.h>
using namespace std;
int b[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int a[50];
int h,m,s;
set<int>q;//用来排重
int main()
{  for(int i=1;i<=40;i++)//年份已固定,只用从后40位枚举{cin>>a[i];}for(int i=1;i<=40;i++)for(int j=i+1;j<=40;j++)for(int k=j+1;k<=40;k++)for(int p=k+1;p<=40;p++){h=a[i]*1000+a[j]*100+a[k]*10+a[p];m=a[i]*10+a[j];s=a[k]*10+a[p];if(m>0&&m<=12&&s>0&&s<=b[m])q.insert(h);}cout<<q.size()<<endl;
}

B 01串的熵

暴力枚举:

#include <iostream>
#include <cmath>
using namespace std;
int main()
{int n = 23333333;for (int i = 1; i < n; ++i){double a = i * 1.0 / n;  // 0出现的占比double b = (n - i) * 1.0 / n;  // 1出现的占比double res = 0;res -= a * log2(a) * i + b * log2(b) * (n - i);if (fabs(res - 11625907.5798) < 0.0001){cout << i << endl;break;} }return 0;
}

C 冶炼金属

解题思路:
最大值可以遍历比较得出,但是最小值要么使用数学公式,要么就是二分答案

公式法:

#include <iostream>
using namespace std;
typedef long long ll;
ll N,A[10010],B[10010],res[10010],res2[10010];
ll minres=1e9+7;
ll maxres2=-1;
int main()
{cin>>N;for(int i=0;i<N;i++){cin>>A[i]>>B[i];res[i]=A[i]/B[i];minres=min(minres,res[i]);res2[i]=A[i]/(B[i]+1);maxres2=max(maxres2,res2[i]);}cout<<maxres2+1<<" "<<minres;return 0;
}

二分答案:

#include<bits/stdc++.h>
using namespace std;
int a[200100],b[200100],n;
int find(int x){for(int i=1;i<=n;i++){if(a[i]/x>b[i]){return 1;}else if(a[i]/x<b[i]){return 0;}}return 0;
}
int main(){int minn=INT_MAX,maxx=INT_MAX;cin>>n;for(int i=1;i<=n;i++){cin>>a[i]>>b[i];maxx=min(maxx,a[i]/b[i]);}int l=0,r=1e9,mid=0;while(l<=r){mid=(l+r)/2;if(find(mid)){l=mid+1;}else{r=mid-1;}}cout<<l<<" "<<maxx<<endl;return 0;
}

D 飞机降落

题目大意:
给你n架飞机的到达,降落花费和可等待时间,让你求是否能全部安全降落

解题思路:
因为最大数据为10,直接上dfs,遍历所有情况,是否有可以降落的情况,注意一下回溯和边界处理就行。(多实例,记得将标记数组初始化)

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl "\n";
int t[20],d[20],l[20],vis[20];
int n,flag; 
void dfs(int sum,int ans){if(ans>=n){flag=1;return ;}for(int i=1;i<=n;i++){if(!vis[i]&&(sum<=t[i]||sum<=t[i]+d[i])){if(sum<=t[i]){vis[i]=1;dfs(t[i]+l[i],ans+1);}else if(sum<=t[i]+d[i]){vis[i]=1;dfs(sum+l[i],ans+1);}else{continue;}vis[i]=0;}}
} 
void solve(){memset(vis,0,sizeof(vis));cin>>n;for(int i=1;i<=n;i++){cin>>t[i]>>d[i]>>l[i];}flag=0;dfs(0,0);if(flag){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}return ;
}
signed main()
{IOSint t=1;cin>>t;while(t--)solve();return 0;
}

E 接龙数列

题目大意:

给你n个数,问你删除几个可以将剩下的组成接龙数列。

解题思路:
因为接龙数列只需要判断首个数字和末尾数字,而且只能有 0 − 9 0-9 09十种可能,所以,只需要开一个dp数组,将每个数的首个数字和末尾数字进行存储,并更新以末尾数字结尾的数组,即是否小于当前以首个数字结尾的接龙数列的长度+1的长度,小于则更新,最后输出最长的一个接龙数列的长度即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl "\n";
int dp[20];
void solve(){int n,maxx=0,a,b;string x;cin>>n;for(int i=1;i<=n;i++){cin>>x;a=x[0]-'0';b=x[x.size()-1]-'0';dp[b]=max(dp[b],dp[a]+1);maxx=max(dp[b],maxx);}cout<<n-maxx<<endl;return ;
}
signed main()
{IOSint t=1;//cin>>t;while(t--)solve();return 0;
}

F 岛屿个数

题目大意:
给你一个n*m的矩阵,由海0和陆地1组成,一个1围成的还就是一个岛屿,但是岛屿里面的岛屿属于子岛屿,不属于岛屿的范畴,让你求一共由多少个岛屿。

解题思路:
因为有环中环的情况,而且只需要判断最外环的情况,所以从最外围的海水开始遍历,接触到最外围海水的一定是岛屿,然后就先dfs一遍把最外围海水标记了,再从外围海水向陆地dfs一遍,每次遍历岛屿数量都加一,最后得出结果。

#include <stdio.h>
#include <stdlib.h>int M, N, d[52][52];void dfs_sea(int i, int j)
{if ((i >= 0 && i <= M + 1) && (j >= 0 && j <= N + 1)){if (d[i][j] == 0){d[i][j] = 2;//标记出外海//八个方向 dfs_sea(i, j + 1);dfs_sea(i, j - 1);dfs_sea(i + 1, j);dfs_sea(i + 1, j + 1);dfs_sea(i + 1, j - 1);dfs_sea(i - 1, j);dfs_sea(i - 1, j + 1);dfs_sea(i - 1, j - 1);}}
}void dfs_island(int i, int j)
{if ((i >= 0 && i <= M + 1) && (j >= 0 && j <= N + 1)){if (d[i][j] == 1){d[i][j] = 3;//搜索过的岛屿不再搜索 dfs_island(i + 1, j);//右 dfs_island(i - 1, j);//左 dfs_island(i, j + 1);//上 dfs_island(i, j - 1);//下 }}
}int main(int argc, char *argv[])
{// 请在此输入您的代码int T;scanf("%d", &T);while (T--){scanf("%d %d", &M, &N);//填充海水for (int i = 0; i < N + 2; i++){d[0][i] = 0;d[M + 1][i] = 0;}for (int i = 1; i < M + 1; i++){d[i][0] = 0;d[i][N + 1] = 0;}//输入图 for (int i = 1; i < M + 1; i++){for (int j = 1; j < N + 1; j++){scanf("%1d", &d[i][j]);}}dfs_sea(0, 0); //找出所有外海 int count;//计算岛屿数量 count = 0;for (int i = 0; i < M + 2; i++){for (int j = 0; j < N + 2; j++){if (d[i][j] == 1 && d[i - 1][j] == 2)//只能从外海搜索岛屿,所以岛屿前一定是外海“2”{dfs_island(i, j);//搜索岛屿 count++;}}}printf("%d\n", count);//以下代码可以打印出处理后的图/*for (int i = 0; i < M + 2; i++){for (int j = 0; j < N + 2; j++){printf("%1d", d[i][j]);if (j == N + 1)printf("\n");}}*/}return 0;
}

G 子串简写

题目大意:给定一个字符串和一个长度K,再给出两个字符a和b,求字符串有多少个长度大于等于K且是以a为首字母,b为尾字母的子串。

解题思路:
因为只需要判断首尾,所以可以直接从字符串的尾部向前遍历并用前缀和来记录b字符的个数,最后字符串从前往后遍历,每遇到一个a字符,就判断在其k-1的长度后,有多少个b字符,将其数量累加,最后输出即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl "\n";
int sum[1000100];
void solve(){int n,num=0;string x;char aa,bb;cin>>n;cin>>x;cin>>aa>>bb;for(int i=x.size()-1;i>=0;i--){if(x[i]==bb){sum[i]+=sum[i+1]+1;}else{sum[i]+=sum[i+1];}}for(int i=0;i<x.size();i++){if(x[i]==aa){num+=sum[i+n-1];}}cout<<num<<endl;return ;
}
signed main()
{IOSint t=1;//cin>>t;while(t--)solve();return 0;
}

H 整数删除

题目大意:给你n个数,和k次操作,每次操作将当前剩余数中最小数的左右两个数加上当前最小数的值(多个最小数从前往后进行操作,左边或者右边没有数则不操作),并将这个最小数剔除,问你k次操作后的序列是什么。

解题思路:
因为需要动态维护最小值,所以使用优先队列,但是因为每次进行操作后,最小值可能会发生变化,所以需要加上双向链表进行优化。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;const int N = 5e5 + 10;
ll v[N], l[N], r[N];void del(int x) {r[l[x]] = r[x], l[r[x]] = l[x];v[l[x]] += v[x], v[r[x]] += v[x];
}int main () {int n, k; cin >> n >> k;r[0] = 1, l[n + 1] = n;priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> h;for (int i = 1; i <= n; i ++)cin >> v[i], l[i] = i - 1, r[i] = i + 1, h.push({v[i], i});while (k --) {auto p = h.top(); h.pop();if (p.first != v[p.second]) h.push({v[p.second], p.second}), k ++;else del(p.second);}int head = r[0];while (head != n + 1) {cout << v[head]<< " ";head = r[head];}return 0;
}

最后两题考到了LCA算法,有点属于盲区了算是,回去恶补一下,两周内题解补上!!!

相关文章:

第十四届蓝桥杯省赛C++B组题解

考点 暴力枚举&#xff0c;搜索&#xff0c;数学&#xff0c;二分&#xff0c;前缀和&#xff0c;简单DP&#xff0c;优先队列&#xff0c;链表&#xff0c;LCA&#xff0c;树上差分 A 日期统计 暴力枚举&#xff1a; #include<bits/stdc.h> using namespace std; int …...

语音控制模块_雷龙发展

一 硬件原理 1&#xff0c;串口 uart串口控制模式&#xff0c;即异步传送收发器&#xff0c;通过其完成语音控制。 发送uart将来自cpu等控制设备的并行数据转换为串行形式&#xff0c;并将其串行发送到接收uart&#xff0c;接收uart然后将串行数据转换为接收数据接收设备的并行…...

idea 开发serlvet班级通讯录管理系统idea开发mysql数据库web结构计算机java编程layUI框架开发

一、源码特点 idea开发 java servlet 班级通讯录管理系统是一套完善的web设计系统mysql数据库 系统采用serlvetdaobean mvc 模式开发&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 servlet 班…...

Python高级语法

Python高级语 1 列表推导式1.1 什么是列表推导式1.2 列表推导式的使用 2 字典推导式2.1 什么是字典推导式2.2 字典推导式的使用 3 元组推导式4 集合推导式5 三元表达式5.1 什么是三元表达式5.2 三元表达式的使用 1 列表推导式 1.1 什么是列表推导式 列表推导式的英文&#xf…...

HTML5语义化元素

在HTML5之前&#xff0c;网站的分布层级有哪些呢&#xff1f; nav&#xff0c;header&#xff0c;main&#xff0c;footer 这样做有一个弊端 我们往往过多的使用div&#xff0c;通过ID或class来区分元素 对于浏览器来说这些元素不够语义化 对于我来说搜索引擎来说&#xff0c;不…...

Android 性能优化——APP启动优化

一、APP启动流程 首先在《Android系统和APP启动流程》中我们介绍了 APP 的启动流程&#xff0c;但都是 FW 层的流程&#xff0c;这里我们主要分析一下在 APP 中的启动流程。要了解 APP 层的启动流程&#xff0c;首先要了解 APP 启动的分类。 1、启动分类 冷启动 应用从头开始…...

计算机网络:TCP篇

计网tcp部分面试总结 tcp报文格式&#xff1a; 序列号&#xff1a;通过SYN传给接收端&#xff0c;当SYN为1&#xff0c;表示请求建立连接&#xff0c;且设置序列号初值&#xff0c;后面没法送一次数据&#xff0c;就累加数据大小&#xff0c;保证包有序。 确认应答号&#x…...

【NLP11-迁移学习】

1、了解迁移学习中的有关概念 1.1、预训练模型&#xff08;pretrained model) 一般情况下预训练模型都是大型模型&#xff0c;具备复杂的网络结构&#xff0c;众多的参数量&#xff0c;以及在足够大的数据集下进行训练而产生的模型。在NLP领域&#xff0c;预训练模型往往是语…...

Android11 FallbackHome启动和关闭流程分析

Android 7.0引入了新特性&#xff1a;Direct Boot Mode&#xff0c;设备启动后进入的一个新模式&#xff0c;直到用户解锁&#xff08;unlock&#xff09;设备此阶段结束。在这个模式下&#xff0c;系统调用 resolveHomeActivity 找到的是FallbackHome &#xff0c;而不是我们的…...

elasticsearch-java api 8 升级

es client api 升级 背景 公司项目从sring-boot2 升级到了spring-boot3 &#xff0c;es的服务端也跟着升级到了es8 &#xff0c;而es的客户端7和服务端8 是不兼容的&#xff0c; 客户端es 7使用的是&#xff1a; elasticsearch-rest-high-level-client es 8 升级到&#xf…...

HCIA_IP路由基础问题?

目录 1. 什么是路由&#xff1f;2. 什么是路由器&#xff1f;3. 什么是路由信息&#xff1f;4. 路由器信息和路由表的区别&#xff1f;5. 路由表的生成方式&#xff1f;6.直连路由生效条件是什么&#xff1f;7.Inloopback0是什么接口&#xff1f;8.最优路由选择的原则&#xff…...

(黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_高级篇_01&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术——保护 今日目标1.初识Sentinel1.1.雪崩问题及解决方案1.2.服务保护技术对比1.3.Sentinel介绍和安装1.3.1.初识Sentinel1.3.2.安装Sentinel 1.…...

高架学习笔记之信息系统分类概览

目录 零、前言 一、业务处理系统(TPS) 概念 功能 特点 二、管理信息系统(MIS) 概念 功能 组成 三、决策支持系统(DSS) 概念 功能 特点 组成 1. 数据仓库 2. 数据挖掘工具 3. 决策模型 4. 可视化界面 四、专家系统(ES) 概念 特点 组成 求解过程 专家系统…...

2023新版mapinfo美化电子地图 新版2013Arcgis shp电子地图 下载

2023新版MapInfo和电子地图美化&#xff0c;以及2013版ArcGIS的SHP电子地图设计&#xff0c;是地理信息系统&#xff08;GIS&#xff09;领域中的两个重要话题。下面将分别对这两个主题进行描述。 样图&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1WB4AGsycyBGagVq5…...

BUUCTF-Ezsql1

1.打开靶机 打开第一个链接 2.万能密码 使用万能密码&#xff1a;a or 1 # 密码为随意 第二个用kali打开 3.ssh连接靶机 ssh ctf284490d0-7600-4c65-9160-5ced02f45633.node5.buuoj.cn -p 28191 由题可知密码为123456 4.找到并修改index.php文件 找到index.php文件 #内容如…...

LiveGBS流媒体平台GB/T28181功能-大屏播放上大屏支持轮巡播放分屏轮巡值守播放监控视频轮播大屏轮询播放轮播

LiveGBS支持-大屏播放上大屏支持轮巡播放分屏轮巡值守播放监控视频轮播大屏轮询播放轮播 1、轮播功能2、分屏展示3、选择轮播通道4、配置轮播间隔(秒)5、点击开始轮播6、轮播停止及全屏7、搭建GB28181视频直播平台 1、轮播功能 视频监控项目使用过程中&#xff0c;有时需要大屏…...

npm和pnpm安装、更换镜像源

安装pnpm 1 wins 在系统中搜索框 输入“Windos PowerShell”右击“管理员身份运行” 2 输入“set-ExecutionPolicy RemoteSigned”回车,根据提示输入A&#xff0c;回车 3 输入 pnpm -v 查看版本 如果没有版本好就是没有安装 pnpm 输入安装命令 npm install -g pnpm 4 再次 …...

springcloud 复习day1~[自动装配]

package com.gavin.eureka_server;public class First {private String auto"自动装配";public String getAuto() {return auto;}public void setAuto(String auto) {this.auto auto;} }package com.gavin.eureka_server;public class Second { }装配:实现ImportSe…...

模块化开发在不同编程语言中的实现方式有何异同?并以LabVIEW为例进行说明

模块化开发是一种软件设计方法&#xff0c;它将一个大型程序分解成独立的、可以单独开发和测试的模块或组件。这种方法提高了代码的可重用性、可维护性和可测试性。不同编程语言实现模块化开发的方式各有特色&#xff0c;但都遵循基本的设计原则&#xff0c;如封装、接口抽象和…...

外贸网站文章批量生成器

随着全球贸易的不断发展&#xff0c;越来越多的企业开始关注外贸市场&#xff0c;而拥有高质量的内容是吸引潜在客户的关键之一。然而&#xff0c;为外贸网站生产大量优质的文章内容可能是一项耗时且繁琐的任务。因此&#xff0c;外贸网站文章批量生成软件成为了解决这一难题的…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

js 设置3秒后执行

如何在JavaScript中延迟3秒执行操作 在JavaScript中&#xff0c;要设置一个操作在指定延迟后&#xff08;例如3秒&#xff09;执行&#xff0c;可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法&#xff0c;它接受两个参数&#xff1a; 要执行的函数&…...

Flask+LayUI开发手记(八):通用封面缩略图上传实现

前一节做了头像上传的程序&#xff0c;应该说&#xff0c;这个程序编写和操作都相当繁琐&#xff0c;实际上&#xff0c;头像这种缩略图在很多功能中都会用到&#xff0c;屏幕界面有限&#xff0c;绝不会给那么大空间摆开那么大一个界面&#xff0c;更可能的处理&#xff0c;就…...

基于 Transformer robert的情感分类任务实践总结之二——R-Drop

基于 Transformer robert的情感分类任务实践总结之一 核心改进点 1. R-Drop正则化 原理&#xff1a;通过在同一个输入上两次前向传播&#xff08;利用Dropout的随机性&#xff09;&#xff0c;强制模型对相同输入生成相似的输出分布&#xff0c;避免过拟合。实现&#xff1a…...

Spring Cloud Alibaba Seata安装+微服务实战

目录 介绍核心功能三层核心架构安装微服务实战创建三个业务数据库编写库存和账户两个Feign接口订单微服务 seata-order-service9701库存微服务 seata-store-service9702账户微服务 seata-account-service9703测试结果 总结 介绍 Spring Cloud Alibaba Seata 是一款开源的分布式…...

VibePlayer

源代码地址&#xff1a; VibePlayer: VibePlayer是一款功能强大的Android音乐播放器应用&#xff0c;专为音乐爱好者设计&#xff0c;提供了丰富的音乐播放和管理功能。 用户需求 VibePlayer是一款功能强大的Android音乐播放器应用&#xff0c;专为音乐爱好者设计&#xff0…...