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

【蓝桥杯】第十四届C++B组省赛

头像
⭐️个人主页:@小羊
⭐️所属专栏:蓝桥杯
很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

动图描述

目录

    • 试题A:日期统计
    • 试题B:01串的熵
    • 试题C:冶炼金属
    • 试题D:飞机降落
    • 试题E:接龙数列
    • 试题F:岛屿个数
    • 试题G:子串简写
    • 试题H:整数删除
    • 试题I:景区导游
    • 试题J:砍树


试题A:日期统计

在这里插入图片描述

枚举出2023年所有日期,在数组中查找。结果是:235。

#include <bits/stdc++.h>
using namespace std;int main()
{int ret = 0;vector<int> v(100);for (int i = 0; i < 100; i++){cin >> v[i];}int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};for (int i = 1; i <= 12; i++){for (int j = 1; j <= days[i]; j++){string s("2023");if (i < 10) s += "0";s += to_string(i);if (j < 10) s += "0";s += to_string(j);int k = 0;for (int l = 0; l < v.size() && k < 8; l++){if ((s[k] - '0') == v[l]) k++;} if (k == 8) ret++;}}cout << ret << endl;return 0;
}

试题B:01串的熵

在这里插入图片描述

关键是要读懂题目,0的次数比1少,数据范围也不是很大,直接从0出现0次开始枚举,中间过程中某一时刻的值是否等于题目中给定的熵。(特别注意判断浮点数相等,不能用 == 判断,只能判断其差是否在一个范围,通常都用0.1

最后答案是:11027421。

#include <bits/stdc++.h>
using namespace std;int main()
{double len = 23333333;double H = 11625907.5798;for (int i = 0; i < len / 2; i++){double sum = 0;sum -= i* (i / len)*log2(i / len) + (len - i)*((len - i) / len)*log2((len - i) / len);if (abs(sum - H) < 0.1){cout << i << endl;break;}}return 0;
} 

试题C:冶炼金属

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
解题关键:当普通金属的数目不足V时,无法冶炼。
则我们可以得出关系:B * V <= A(B + 1) * V > A,所以 V <= A / BV > A / (B + 1),我们就得到了关于V的一个左右区间,所以 Vr = min(A / B)(右区间的最小值),Vl = max(A / (B + 1) + 1)(左区间的最大值)。

注意细节,为什么 A / (B + 1) 后面还要再加1,因为 V > A / (B + 1) 不能去等号。

#include <bits/stdc++.h>
using namespace std;int main()
{int n;cin >> n;int vl = INT_MIN, vr = INT_MAX;for (int i = 0; i < n; i++){int a, b;cin >> a >> b;vr = min(a / b, vr);vl = max(a / (b + 1) + 1, vl);}cout << vl << " " << vr << endl; return 0;
} 

试题D:飞机降落

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
题目数据范围不大,可以考虑暴力枚举尝试正确答案。

  • 每架飞机可以在空中盘旋等待的时间:T[i] + D[i]
  • 即这架飞机可以降落的条件是:T[i] + D[i] >= time,time表示上一架飞机降落后的时刻;
  • 当前飞机降落的过程中,下一架飞机可能在空中盘旋等待,则 time + L[i] 时间后下一架飞机可以开始降落;也可能当前飞机降落了下一架飞机还没来,则 T[i] + L[i]时间后下一架飞机可以开始降落,两种情况下 time 要取较大值。
#include <bits/stdc++.h>
using namespace std;int t, n;
int T[11], D[11], L[11];
bool used[11] = {}; // 标记是否安排过了当前飞机
int flag = 0; // 标记全部飞机是否安全降落void dfs(int x, int time) // x表示安排到了第几架飞机,			
{                         // time表示前面一架飞机降落后的时间if (x >= n) // 根据题目要求枚举到了最后一架飞机{flag = 1;return;}for (int i = 0; i < n; i++) // 一架一架的尝试{  // 当前飞机还没被安排,在天上可以停留的时间>前面飞机降落的最后时间if (!used[i] && T[i] + D[i] >= time) {used[i] = true; // 如果满足条件就让这个飞机降落// 这架飞机降落后下一架飞机可能还没来,或者后面一架飞机在天空盘旋等待dfs(x + 1, max(T[i], time) + L[i]);used[i] = false;}}
}
int main()
{cin >> t;while (t--){cin >> n;for (int i = 0; i < n; i++)cin >> T[i] >> D[i] >> L[i];dfs(0, 0); // 第0架飞机在0时刻降落if (flag) cout << "YES" << endl;else cout << "NO" << endl;flag = 0;}return 0;
}

试题E:接龙数列

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

题目要求我们求最少删除几个数后剩下的序列是接龙序列,这其实是不好求的,所以我们可以正难则反,求最长接龙序列的长度,转而就得到了最少的删除个数。

定义状态 dp[i] 表示以数字 i 结尾的最长接龙序列的长度。
对于当前数,如果当前数的第一个数字可以接到前面某个数的后面,也就是当前数的第一个数字等于前面某个数的最后一位数,那么当前数就可以接到这个数后面。

状态转移:dp[i] = dp[j] + 1;其中 i 表示当前数的最后一位上的数,j 表示当前数的开头。

#include <bits/stdc++.h>
using namespace std;int dp[10];int main()
{int n;cin >> n;for (int i = 0; i < n; i++){string s;cin >> s;int sz = s.size();dp[s[sz - 1] - '0'] = max(dp[s[sz - 1] - '0'], dp[s[0] - '0'] + 1);}int ret = 0;for (int i = 0; i < 10; i++)ret = max(ret, dp[i]);cout << (n - ret) << endl;return 0;
}

试题F:岛屿个数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;int m, n;
char arr[51][51];
int dx[8] = {-1, 1, 0, 0, -1, 1, 1, -1};
int dy[8] = {0, 0, -1, 1, 1, 1, -1, -1};
bool used[51][51];bool check(int i, int j)
{for (int i = 0; i <= m; i++)for (int j = 0; j <= n; j++)used[i][j] = false;queue<pair<int, int>> q;q.push({i, j});used[i][j] = true;while (q.size()){int a = q.front().first, b = q.front().second;q.pop();for (int k = 0; k < 8; k++){int x = a + dx[k], y = b + dy[k];if (x < 1 || x > m || y < 1 || y > n) return true;if (arr[x][y] == '0' && !used[x][y]){q.push({x, y});used[x][y] = true;}}}return false;
}void dfs(int i, int j)
{for (int k = 0; k < 4; k++){int x = i + dx[k], y = j + dy[k];if (x > 0 && x <= m && y > 0 && y <= n && arr[x][y] == '1'){arr[x][y] = '0';dfs(x, y);	} }
}int main()
{int t;cin >> t;while (t--){cin >> m >> n;for (int i = 1; i <= m; i++)for (int j = 1; j <= n; j++)cin >> arr[i][j];for (int i = 1; i <= m; i++)for (int j = 1; j <= n; j++)if (arr[i][j] == '1' && !check(i, j))arr[i][j] = '0';int ret = 0;for (int i = 1; i <= m; i++)for (int j = 1; j <= n; j++)if (arr[i][j] == '1'){ret++;dfs(i, j);}cout << ret << endl;}return 0;
}

试题G:子串简写

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

根据样例,从头到尾遍历字符串统计a的个数,在这个过程中只要遇到b就把统计到的a的个数累加到结果中,因为有区间宽度限制,只要在维护的最小宽度也就是k的区间内不累加到结果中就行。

#include<iostream>
using namespace std;long long ret = 0, cnt = 0;int main()
{int k;cin >> k;string str;char c1, c2;cin >> str >> c1 >> c2;int l = 0, r = k - 1;while (1){if (r == str.size()) break;if (str[l] == c1) cnt++;if (str[r] == c2) ret += cnt;l++, r++;}cout << ret << endl;return 0;
}

试题H:整数删除

在这里插入图片描述

在这里插入图片描述

// 样例输入
5 3
1 4 2 8 7
// 样例输出
17 7

直接模拟,只能通过部分测试用例:

#include <bits/stdc++.h>
using namespace std;int main()
{int n, k;cin >> n >> k;vector<int> v(n);for (int i = 0; i < n; i++)cin >> v[i];while (k--){int index = 0;for (int i = 0; i < v.size(); i++)if (v[index] > v[i])index = i;if (index - 1 >= 0) v[index - 1] += v[index];if (index + 1 < n) v[index + 1] += v[index];v.erase(v.begin() + index);}for (int e : v)cout << e << " ";return 0;
} 

使用优先级队列+双链表优化时间。

#include <bits/stdc++.h>
using namespace std;using ll = long long;
using pr = pair<ll, ll>;
const int N = 1e6;
struct { ll prev, next; } a[N]; // 记录对应位置前后的下标,方便删除
ll update[N], ret[N]; // update用于记录每个元素需要更新的值,// 需要累加的值暂时存到这个数组中
priority_queue<pr, vector<pr>, greater<pr>> pq;int main()
{ll n, k;cin >> n >> k;for (int i = 1; i <= n; i++){ll x; cin >> x;a[i].prev = i - 1;a[i].next = i + 1;pq.push({x, i});}while (pq.size() > n - k){ll v = pq.top().first, id = pq.top().second;pq.pop();if (update[id]) // id下标对应的元素有被累加过{pq.push({v + update[id], id});// 加入小堆中重新选择最小值update[id] = 0;}else{ll l = a[id].prev, r = a[id].next;// 将当前的值加到前后元素上update[l] += v;update[r] += v;// 删除节点a[l].next = r;a[r].prev = l;}}while (pq.size()){ll v = pq.top().first, id = pq.top().second;pq.pop();ret[id] = v + update[id];}for (auto e : ret)if (e) cout << e << " ";return 0;
}

试题I:景区导游

在这里插入图片描述
在这里插入图片描述

// 样例输入
6 4
1 2 1
1 3 1
3 4 2
3 5 2
4 6 3
2 6 5 1
// 样例输出
10 7 13 14


试题J:砍树

在这里插入图片描述
在这里插入图片描述

// 样例输入
6 2
1 2
2 3
4 3
2 5
6 5
3 6
4 5
4
// 样例输出
4


本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

头像

相关文章:

【蓝桥杯】第十四届C++B组省赛

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;蓝桥杯 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 试题A&#xff1a;日期统计试题B&#xff1a;01串的熵试题C&#xff1a;冶炼金属试题D&#xff1a;飞机降落试题E&#xff1a;接…...

企业级海外网络专线行业应用案例及服务商推荐

在全球化业务快速发展的今天&#xff0c;传统网络技术已难以满足企业需求。越来越多企业开始选择新型海外专线解决方案&#xff0c;其中基于SD-WAN技术的企业级海外网络专线备受关注。这类服务不仅能保障跨国数据传输&#xff0c;还能根据业务需求灵活调整网络配置。接下来我们…...

阿里云服务器安装docker以及mysql数据库

(1) 官方下载路径 官方下载地址: Index of linux/static/stable/x86_64/阿里云镜像地址: https://mirrors.aliyun.com/docker-ce/下载最新的 Docker 二进制文件&#xff1a;wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.23.tgz登录到阿里云服务…...

力扣经典算法篇-5-多数元素(哈希统计,排序,摩尔投票法)

题干&#xff1a; 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&…...

axios介绍以及配置

Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;用于浏览器和 Node.js 环境中进行 HTTP 请求。 一、特点与基本用法 1.特点 浏览器兼容性好&#xff1a;能在多种现代浏览器中使用&#xff0c;包括 Chrome、Firefox、Safari 等。支持 Promise API&#xff1a;基于 Prom…...

深入解析:HarmonyOS Design设计语言的核心理念

深入解析&#xff1a;HarmonyOS Design设计语言的核心理念 在当今数字化迅速发展的时代&#xff0c;用户对操作系统的体验要求越来越高。华为的HarmonyOS&#xff08;鸿蒙操作系统&#xff09;应运而生&#xff0c;旨在为用户提供全场景、全设备的智慧体验。其背后的设计语言—…...

大数据技术之Scala:特性、应用与生态系统

摘要 Scala 作为一门融合面向对象编程与函数式编程范式的编程语言&#xff0c;在大数据领域展现出独特优势。本文深入探讨 Scala 的核心特性&#xff0c;如函数式编程特性、类型系统以及与 Java 的兼容性等。同时&#xff0c;阐述其在大数据处理框架&#xff08;如 Apache Spa…...

程序化广告行业(47/89):竞价指标剖析与流量对接要点

程序化广告行业&#xff08;47/89&#xff09;&#xff1a;竞价指标剖析与流量对接要点 大家好&#xff01;一直以来&#xff0c;我都希望能和大家一同深入探索程序化广告行业的奥秘&#xff0c;这也是我持续撰写这一系列博客的动力。今天&#xff0c;咱们接着来剖析程序化广告…...

dfs记忆化搜索刷题 + 总结

文章目录 记忆化搜索 vs 动态规划斐波那契数题解代码 不同路径题解代码 最长递增子序列题解代码 猜数字大小II题解代码 矩阵中的最长递增路径题解代码 总结 记忆化搜索 vs 动态规划 1. 记忆化搜索&#xff1a;有完全相同的问题/数据保存起来&#xff0c;带有备忘录的递归 2.记忆…...

vue2 全局封装axios统一管理api

在vue项目中&#xff0c;经常会使用到axios来与后台进行数据交互&#xff0c;axios丰富的api满足我们基本的需求。但是对于项目而言&#xff0c;每次都需要对异常进行捕获或者处理的话&#xff0c;代码会很繁重冗余。我们需要将其公共部分封装起来&#xff0c;比如异常处理&…...

大模型有哪些算法

大模型&#xff08;Large-scale Models&#xff09;通常指参数量大、架构复杂、在特定任务或领域表现出色的深度学习模型。这些模型的算法核心往往基于Transformer 架构及其变体&#xff0c;同时结合了大规模数据、硬件加速和优化技巧。以下是当前主流大模型及其核心算法的分类…...

【Linux】进程的详讲(中上)

目录 &#x1f4d6;1.什么是进程? &#x1f4d6;2.自己写一个进程 &#x1f4d6;3.操作系统与内存的关系 &#x1f4d6;4.PCB(操作系统对进程的管理) &#x1f4d6;5.真正进程的组成 &#x1f4d6;6.形成进程的过程 &#x1f4d6;7、Linux环境下的进程知识 7.1 task_s…...

Python Cookbook-4.17 字典的并集与交集

任务 给定两个字典&#xff0c;需要找到两个字典都包含的键(交集)&#xff0c;或者同时属于两个字典的键(并集)。 解决方案 有时&#xff0c;尤其是在Python2.3中&#xff0c;你会发现对字典的使用完全是对集合的一种具体化的体现。在这个要求中&#xff0c;只需要考虑键&am…...

优选算法的巧思之径:模拟专题

专栏&#xff1a;算法的魔法世界 个人主页&#xff1a;手握风云 目录 一、模拟 二、例题讲解 2.1. 替换所有的问号 2.2. 提莫攻击 2.3. Z字形变换 2.4. 外观数列 2.5. 数青蛙 一、模拟 模拟算法说简单点就是照葫芦画瓢&#xff0c;现在草稿纸上模拟一遍算法过程&#xf…...

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft 服务器搭建,并实现远程联机,详细教程

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft 服务器搭建&#xff0c;详细详细教程 一、 服务器介绍二、下载 Minecraft 服务端三、安装 JDK 21四、搭建服务器五、本地测试连接六、添加服务&#xff0c;并设置开机自启动 前言&#xff1a; 推荐使用云服务器部署&…...

文本分析(非结构化数据挖掘)——特征词选择(基于TF-IDF权值)

TF-IDF是一种用于信息检索和文本挖掘的常用加权算法&#xff0c;用于评估一个词在文档或语料库中的重要程度。它结合了词频&#xff08;TF&#xff09;和逆文档频率&#xff08;IDF&#xff09;两个指标&#xff0c;能够有效过滤掉常见词&#xff08;如“的”、“是”等&#x…...

【JavaSE】小练习 —— 图书管理系统

【JavaSE】JavaSE小练习 —— 图书管理系统 一、系统功能二、涉及的知识点三、业务逻辑四、代码实现4.1 book 包4.2 user 包4.3 Main 类4.4 完善管理员菜单和普通用户菜单4.5 接着4.4的管理员菜单和普通用户菜单&#xff0c;进行操作选择&#xff08;1查找图书、2借阅图书.....…...

命令模式介绍及应用案例

命令模式介绍 命令模式&#xff08;Command Pattern&#xff09; 是一种行为设计模式&#xff0c;它将请求封装为一个对象&#xff0c;从而使你可以用不同的请求对客户进行参数化&#xff0c;并且支持请求的排队、记录日志、撤销操作等功能。命令模式的核心思想是将“请求”封…...

多线程(多线程案例)(续~)

目录 一、单例模式 1. 饿汉模式 2. 懒汉模式 二、阻塞队列 1. 阻塞队列是什么 2. 生产者消费者模型 3. 标准库中的阻塞队列 4. 自实现阻塞队列 三、定时器 1. 定时器是什么 2. 标准库中的定时器 欢迎观看我滴上一篇关于 多线程的博客呀&#xff0c;直达地址&#xf…...

python笔记之函数

函数初探 python在要写出函数很简单&#xff0c;通过关键字def即可写出&#xff0c;简单示例如下 def add(a, b):return ab 以上即可以定义出一个简单的函数&#xff1a;接收两个变量a和b&#xff0c;返回a和b相加的结果&#xff0c;当然这么说也不全对&#xff0c;原因就是…...

合合信息大模型加速器2.0实测:当AI开始“读心术“与“考古“

凌晨三点的编辑部&#xff0c;我盯着屏幕上密密麻麻的财务报表和如天书般的专利图纸&#xff0c;感觉咖啡因正在大脑中上演"黑凤凰"式崩溃。这时&#xff0c;合合信息的AI助手突然开口&#xff1a;"您需要的是自动关联32个数据表&#xff0c;还是让模型直接生成…...

一个判断A股交易状态的python脚本

最近在做股票数据相关的项目&#xff0c;需要用到判断某一天某个时刻A股的状态&#xff0c;比如休市&#xff0c;收盘&#xff0c;交易中等&#xff0c;发动脑筋想了一下&#xff0c;这个其实还是比较简单的&#xff0c;这里我把实现方法分享给大家。 思路 当天是否休市 对于某…...

【go】数组与切片

数组Array 重点&#xff1a; 数组是值类型 数组的定义 var 数组名 [数组大小] 数据类型,例如var intArr [5] int&#xff0c;定义完数组后数组里的元素有默认值。、 数组的地址&intArr、&intArr[0]。 数组占据连续的内存。 int通常是4字节&#xff08;32位&…...

hadoop集群配置-scp命令

scp 命令用于在不同主机之间复制文件或目录&#xff0c;在Hadoop集群配置中常用于将配置文件或相关资源分发到各个节点。以下是 scp 命令的基本用法和在Hadoop集群配置中的示例&#xff1a; 基本语法 scp [-r] [源文件或目录] [目标用户目标主机:目标路径] - -r &#xff1a;…...

闪记(FlashNote):让灵感快速成文的轻量级笔记工具

闪记&#xff08;FlashNote&#xff09;&#xff1a;让灵感快速成文的轻量级笔记工具 你是否经常遇到这样的情况&#xff1a;桌面上放了一大堆的新建123.txt&#xff0c;想记录一个想法&#xff0c;应该是一键开个一个快捷键然后瞬间记录就自动保存了&#xff0c;现在的很多笔记…...

打车APP订单系统逻辑梳理与实现

一、逻辑分析 打车 APP 订单系统是整个打车业务的核心&#xff0c;负责处理从乘客下单到行程结束的一系列流程&#xff0c;涉及乘客、司机和平台三方的交互。 乘客端 下单&#xff1a;乘客打开 APP&#xff0c;输入上车地点、目的地&#xff0c;选择车型等信息后提交订单。此时…...

《大模型部署》——ollama下载及大模型本地部署(详细快速部署)

ollama Ollama 是一款开源跨平台的大语言模型&#xff08;LLM&#xff09;运行工具&#xff0c;旨在简化本地部署和管理 AI 模型的流程。 下载ollama 进入官网下载https://ollama.com/ 选择需要的系统下载 下载完成后直接进行安装 下载大模型 选择想要部署的模型&#…...

【蓝桥杯速成】| 17.完全背包(一维easy版)

题目一&#xff1a;爬楼梯 问题描述 57. 爬楼梯&#xff08;第八期模拟笔试&#xff09; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 < m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正整…...

移动端六大语言速记:第4部分 - 数据结构

移动端六大语言速记&#xff1a;第4部分 - 数据结构 本文对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的数据结构特性&#xff0c;帮助开发者快速掌握各语言的语法差异。 4. 数据结构 4.1 数组与列表 各语言数组与列表的语法对比&#xff1…...

开源鸿蒙分布式软总线技术研究报告

引言 在现代计算环境中&#xff0c;分布式系统的重要性日益凸显&#xff0c;尤其是在物联网&#xff08;IoT&#xff09;和无处不在的连接的背景下。各种智能设备数量的爆炸式增长以及用户对跨设备无缝体验的需求&#xff0c;推动了分布式操作系统的发展。开源鸿蒙正是在这样的…...