当前位置: 首页 > 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;外贸网站文章批量生成软件成为了解决这一难题的…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...