第十四届蓝桥杯省赛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 0−9十种可能,所以,只需要开一个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组题解
考点 暴力枚举,搜索,数学,二分,前缀和,简单DP,优先队列,链表,LCA,树上差分 A 日期统计 暴力枚举: #include<bits/stdc.h> using namespace std; int …...
语音控制模块_雷龙发展
一 硬件原理 1,串口 uart串口控制模式,即异步传送收发器,通过其完成语音控制。 发送uart将来自cpu等控制设备的并行数据转换为串行形式,并将其串行发送到接收uart,接收uart然后将串行数据转换为接收数据接收设备的并行…...
idea 开发serlvet班级通讯录管理系统idea开发mysql数据库web结构计算机java编程layUI框架开发
一、源码特点 idea开发 java servlet 班级通讯录管理系统是一套完善的web设计系统mysql数据库 系统采用serlvetdaobean mvc 模式开发,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用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 什么是列表推导式 列表推导式的英文…...
HTML5语义化元素
在HTML5之前,网站的分布层级有哪些呢? nav,header,main,footer 这样做有一个弊端 我们往往过多的使用div,通过ID或class来区分元素 对于浏览器来说这些元素不够语义化 对于我来说搜索引擎来说,不…...
Android 性能优化——APP启动优化
一、APP启动流程 首先在《Android系统和APP启动流程》中我们介绍了 APP 的启动流程,但都是 FW 层的流程,这里我们主要分析一下在 APP 中的启动流程。要了解 APP 层的启动流程,首先要了解 APP 启动的分类。 1、启动分类 冷启动 应用从头开始…...
计算机网络:TCP篇
计网tcp部分面试总结 tcp报文格式: 序列号:通过SYN传给接收端,当SYN为1,表示请求建立连接,且设置序列号初值,后面没法送一次数据,就累加数据大小,保证包有序。 确认应答号&#x…...
【NLP11-迁移学习】
1、了解迁移学习中的有关概念 1.1、预训练模型(pretrained model) 一般情况下预训练模型都是大型模型,具备复杂的网络结构,众多的参数量,以及在足够大的数据集下进行训练而产生的模型。在NLP领域,预训练模型往往是语…...
Android11 FallbackHome启动和关闭流程分析
Android 7.0引入了新特性:Direct Boot Mode,设备启动后进入的一个新模式,直到用户解锁(unlock)设备此阶段结束。在这个模式下,系统调用 resolveHomeActivity 找到的是FallbackHome ,而不是我们的…...
elasticsearch-java api 8 升级
es client api 升级 背景 公司项目从sring-boot2 升级到了spring-boot3 ,es的服务端也跟着升级到了es8 ,而es的客户端7和服务端8 是不兼容的, 客户端es 7使用的是: elasticsearch-rest-high-level-client es 8 升级到…...
HCIA_IP路由基础问题?
目录 1. 什么是路由?2. 什么是路由器?3. 什么是路由信息?4. 路由器信息和路由表的区别?5. 路由表的生成方式?6.直连路由生效条件是什么?7.Inloopback0是什么接口?8.最优路由选择的原则ÿ…...
(黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
(黑马出品_高级篇_01)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和电子地图美化,以及2013版ArcGIS的SHP电子地图设计,是地理信息系统(GIS)领域中的两个重要话题。下面将分别对这两个主题进行描述。 样图: 链接:https://pan.baidu.com/s/1WB4AGsycyBGagVq5…...
BUUCTF-Ezsql1
1.打开靶机 打开第一个链接 2.万能密码 使用万能密码: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、轮播功能 视频监控项目使用过程中,有时需要大屏…...
npm和pnpm安装、更换镜像源
安装pnpm 1 wins 在系统中搜索框 输入“Windos PowerShell”右击“管理员身份运行” 2 输入“set-ExecutionPolicy RemoteSigned”回车,根据提示输入A,回车 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为例进行说明
模块化开发是一种软件设计方法,它将一个大型程序分解成独立的、可以单独开发和测试的模块或组件。这种方法提高了代码的可重用性、可维护性和可测试性。不同编程语言实现模块化开发的方式各有特色,但都遵循基本的设计原则,如封装、接口抽象和…...
外贸网站文章批量生成器
随着全球贸易的不断发展,越来越多的企业开始关注外贸市场,而拥有高质量的内容是吸引潜在客户的关键之一。然而,为外贸网站生产大量优质的文章内容可能是一项耗时且繁琐的任务。因此,外贸网站文章批量生成软件成为了解决这一难题的…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
数据库——redis
一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...
智能体革命:企业如何构建自主决策的AI代理?
OpenAI智能代理构建实用指南详解 随着大型语言模型(LLM)在推理、多模态理解和工具调用能力上的进步,智能代理(Agents)成为自动化领域的新突破。与传统软件仅帮助用户自动化流程不同,智能代理能够自主执行工…...
