2025牛客寒假算法营2

A题

知识点:模拟

打卡。检查给定的七个整数是否仅包含 1,2,3,5,6 即可。为了便于书写,我们可以反过来,检查这七个整数是否不为 4 和 7。 时间 O(1);空间 O(1)。

 

#include <bits/stdc++.h>
using namespace std;signed main() {bool flag = true;for (int i = 1; i <= 7; i++) {int x;cin >> x;if (x == 4 || x == 7) {flag = false;}}cout << (flag ? "YES" : "NO") << "\n";
}



B题

 

#include <bits/stdc++.h>
using namespace std;signed main() {int n;cin >> n;vector<int> in(n + 1);for (int i = 1; i <= n; i++) {cin >> in[i];}sort(in.begin(), in.end());cout << in[n / 2 + 1] - 1 << "\n";
}



G题

 

#include <bits/stdc++.h>
using namespace std;using i64 = long long;
const i64 inf = 1e18;signed main() {int Task = 1;for (cin >> Task; Task; Task--) {int n, m;cin >> n >> m;i64 Min = 1e18, ans, now = 1;for (int i = 1; i <= 32; i++) {if (now >= inf / m) break;now *= m;if (abs(n - now) < Min) {Min = abs(n - now);ans = i;}}cout << ans << '\n';}
}



F题

 

#include <bits/stdc++.h>
using namespace std;using i64 = long long;signed main() {int Task = 1;for (cin >> Task; Task; Task--) {i64 l, r;cin >> l >> r;cout << (r - l + 1) << "\n";}
}

 




J题

 

 

#include <bits/stdc++.h>
using namespace std;signed main() {int n, h, m;cin >> n >> h >> m;string Date = to_string(h) + "-";if (m < 10) {Date += "0" + to_string(m);}else {Date += to_string(m);}set<string> A, B, C;while (n--) {string user, date, time;cin >> user >> date >> time;if (date.substr(0, 7) != Date) {continue;}string h = time.substr(0, 2);if (h == "07" || h == "08" || time == "09:00:00" ||h == "18" || h == "19" || time == "20:00:00") {A.insert(user);}if (h == "11" || h == "12" || time == "13:00:00") {B.insert(user);}if (h == "22" || h == "23" || h == "00" || time == "01:00:00") {C.insert(user);}}cout << A.size() << " " << B.size() << " " << C.size() << "\n";
}



D题

 

 

#include <bits/stdc++.h>
using namespace std;signed main() {int n;string s;cin >> n >> s;s = "#" + s;int ans = 0;for (int ch = 0; ch < 26; ch++) {int pre = 0, net = 0;for (int i = 1; i <= n; i++) {if (s[i] - 'a' != ch) continue;if (pre != 0) {ans = max(ans, n - i + 1);}pre = i;}for (int i = n; i >= 1; i--) {if (s[i] - 'a' != ch) continue;if (net != 0) {ans = max(ans, i);}net = i;}}cout << (ans == 1 ? 0 : ans) << "\n";
}

代码的核心思路是针对每个小写字母,分别正向和反向遍历字符串,找出该字母至少出现两次时的最长连续子串长度,最后取所有字母对应的最长长度作为可爱度。不过要注意,此代码实现与题目要求的可爱度定义可能存在差异,因为它仅考虑了单个字母的情况,而没有对所有可能的子串和不连续子序列进行检查。

例子 1

5
ababa
  • 分析过程
    • 代码开始遍历每个小写字母。当 ch 为 'a' 时:
      • 正向遍历
        • 第一次遇到 'a' 在位置 1,此时 pre 从 0 变为 1
        • 第二次遇到 'a' 在位置 3,此时 pre 不为 0,计算 n - i + 1 = 5 - 3 + 1 = 3,更新 ans 为 3
        • 第三次遇到 'a' 在位置 5,计算 n - i + 1 = 5 - 5 + 1 = 1ans 保持为 3
      • 反向遍历
        • 第一次遇到 'a' 在位置 5net 从 0 变为 5
        • 第二次遇到 'a' 在位置 3,此时 net 不为 0,计算 i = 3ans 保持为 3
        • 第三次遇到 'a' 在位置 1,计算 i = 1ans 保持为 3
    • 当 ch 为 'b' 时:
      • 正向遍历
        • 第一次遇到 'b' 在位置 2pre 从 0 变为 2
        • 第二次遇到 'b' 在位置 4,此时 pre 不为 0,计算 n - i + 1 = 5 - 4 + 1 = 2ans 保持为 3
      • 反向遍历
        • 第一次遇到 'b' 在位置 4net 从 0 变为 4
        • 第二次遇到 'b' 在位置 2,此时 net 不为 0,计算 i = 2ans 保持为 3
    • 最终 ans 为 3,输出结果为 3

例子 2

3
abc
  • 分析过程
    • 当 ch 为 'a' 时:
      • 正向遍历:只在位置 1 遇到 'a'pre 变为 1,但由于只出现一次,不会更新 ans
      • 反向遍历:同理,也不会更新 ans
    • 当 ch 为 'b' 时:
      • 正向遍历:只在位置 2 遇到 'b',不会更新 ans
      • 反向遍历:不会更新 ans
    • 当 ch 为 'c' 时:
      • 正向遍历:只在位置 3 遇到 'c',不会更新 ans
      • 反向遍历:不会更新 ans
    • 对于其他字母也都只出现一次。最终 ans 为 0,输出结果为 0

例子 3

4
aaaa
  • 分析过程
    • 当 ch 为 'a' 时:
      • 正向遍历
        • 第一次遇到 'a' 在位置 1pre 变为 1
        • 第二次遇到 'a' 在位置 2,此时 pre 不为 0,计算 n - i + 1 = 4 - 2 + 1 = 3,更新 ans 为 3
        • 第三次遇到 'a' 在位置 3,计算 n - i + 1 = 4 - 3 + 1 = 2ans 保持为 3
        • 第四次遇到 'a' 在位置 4,计算 n - i + 1 = 4 - 4 + 1 = 1ans 保持为 3
      • 反向遍历
        • 第一次遇到 'a' 在位置 4net 变为 4
        • 第二次遇到 'a' 在位置 3,此时 net 不为 0,计算 i = 3ans 保持为 3
        • 第三次遇到 'a' 在位置 2,计算 i = 2ans 保持为 3
        • 第四次遇到 'a' 在位置 1,计算 i = 1ans 保持为 3
    • 对于其他字母都未出现。最终 ans 为 3,输出结果为 3



K题

 

#include <bits/stdc++.h>
using namespace std;
// 定义长整型别名,在某些涉及较大整数运算时可使用
#define i64 long long
// 定义上下左右四个方向在 x 轴上的偏移量
int dx[4] = {-1, 1, 0, 0};
// 定义上下左右四个方向在 y 轴上的偏移量
int dy[4] = {0, 0, -1, 1};// 解决问题的核心函数
void solve() {int n, m;// 读取矩阵的行数 n 和列数 mcin >> n >> m;// 定义一个字符串向量 s 来存储矩阵,索引从 1 开始,方便后续处理vector<string> s(n + 1);for (int i = 1; i <= n; i++) {// 读取每一行的字符串cin >> s[i];// 在每行字符串前添加一个字符 '%',使得字符串索引从 1 开始s[i] = "%" + s[i];}// 用于存储每个蓝色极大连通块对应的需要敲碎的灰色砖块数量,初始大小为 m * n + 1vector<int> g(m * n + 1);// 记录当前蓝色极大连通块的编号int idx = 0;// 二维布尔数组 v,用于标记矩阵中每个位置是否已被访问过vector<vector<bool>> v(n + 1, vector<bool>(m + 1, false));// 二维数组 num,记录每个蓝色砖块所属的蓝色极大连通块编号vector<vector<int>> num(n + 1, vector<int>(m + 1, 0));// 定义一个递归的 lambda 函数 dfs,用于深度优先搜索蓝色极大连通块auto dfs = [&](auto &&self, int x, int y, int id) -> void {// 标记当前位置 (x, y) 的蓝色砖块属于编号为 id 的连通块num[x][y] = id;// 标记当前位置已被访问v[x][y] = true;for (int i = 0; i < 4; i++) {// 计算相邻位置的 x 坐标int nx = dx[i] + x;// 计算相邻位置的 y 坐标int ny = dy[i] + y;// 检查相邻位置是否在矩阵范围内、未被访问且为蓝色砖块if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && !v[nx][ny] && s[nx][ny] == '1') {// 递归调用 dfs 函数继续搜索相邻的蓝色砖块self(self, nx, ny, id);}}};// 遍历矩阵中的每个位置for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {// 如果当前位置未被访问且为蓝色砖块if (!v[i][j] && s[i][j] == '1') {// 蓝色极大连通块编号加 1++idx;// 调用 dfs 函数开始搜索该连通块dfs(dfs, i, j, idx);}}}// 再次遍历矩阵,统计每个蓝色极大连通块周围的灰色砖块数量for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (s[i][j] == '0') {// 用于记录当前灰色砖块相邻的不同蓝色极大连通块编号map<int, bool> ex;for (int k = 0; k < 4; k++) {// 计算相邻位置的 x 坐标int nx = i + dx[k];// 计算相邻位置的 y 坐标int ny = j + dy[k];// 检查相邻位置是否在矩阵范围内、为蓝色砖块且该连通块编号未被记录过if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && s[nx][ny] == '1' && !ex[num[nx][ny]]) {// 对应连通块的需要敲碎的灰色砖块数量加 1g[num[nx][ny]]++;// 标记该连通块编号已被记录ex[num[nx][ny]] = true;}}}}}// 对存储每个连通块对应灰色砖块数量的向量 g 进行排序,排序范围是从索引 1 到 idxsort(g.begin() + 1, g.begin() + idx + 1);// 输出需要敲碎的最少灰色砖块数量cout << g[1];
}int main() {// 关闭输入输出流的同步,提高输入输出效率ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t = 1;// 循环调用 solve 函数,这里 t 为 1,即只调用一次while (t--) solve();return 0;
}

 

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

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

相关文章

STM32 FreeRTOS中断管理

目录 FreeRTOS的中断管理 1、STM32中断优先级管理 2、FreeRTOS任务优先级管理 3、寄存器和内存映射寄存器 4、BASEPRI寄存器 5、FreeRTOS与STM32中断管理结合使用 vPortRaiseBASEPRI vPortSetBASEPRI 6、FromISR后缀 7、在中断服务函数中调用FreeRTOS的API函数需注意 F…

【ComfyUI】python调用生图API,实现批量出图

官方给的示例&#xff1a; https://github.com/comfyanonymous/ComfyUI/blob/master/script_examples/websockets_api_example.pyhttps://github.com/comfyanonymous/ComfyUI/blob/master/script_examples/websockets_api_example.pyhttps://github.com/comfyanonymous/ComfyU…

在Docker 容器中安装 Oracle 19c

在 Docker 容器中安装 Oracle 19c 是可行的&#xff0c;但它相较于其他数据库&#xff08;如 MySQL、PostgreSQL 等&#xff09;会复杂一些&#xff0c;因为 Oracle 数据库有一些特定的要求&#xff0c;如操作系统和库的依赖&#xff0c;以及许可证问题。 不过&#xff0c;Ora…

macos的图标过大,这是因为有自己的设计规范

苹果官方链接&#xff1a;App 图标 | Apple Developer Documentation 这个在官方文档里有说明&#xff0c;并且提供了sketch 和 ps 的模板。 figma还提供了模板&#xff1a; Figma

告别手动编辑:如何用Python快速创建Ansible hosts文件?

在自动化运维领域&#xff0c;Ansible是一款非常强大的工具&#xff0c;它可以帮助我们管理和配置大量的服务器。为了让Ansible能够有效地管理这些服务器&#xff0c;我们需要一个hosts清单文件&#xff0c;该文件定义了Ansible要管理的目标主机。在实际应用中&#xff0c;我们…

macOS安装Gradle环境

文章目录 说明安装JDK安装Gradle 说明 gradle8.5最高支持jdk21&#xff0c;如果使用jdk22建议使用gradle8.8以上版本 安装JDK mac系统安装最新&#xff08;截止2024.9.13&#xff09;Oracle JDK操作记录 安装Gradle 下载Gradle&#xff0c;解压将其存放到资源java/env目录…

【嵌入式】总结——Linux驱动开发(三)

鸽了半年&#xff0c;几乎全忘了&#xff0c;幸亏前面还有两篇总结。出于快速体验嵌入式linux的目的&#xff0c;本篇与前两篇一样&#xff0c;重点在于使用、快速体验&#xff0c;uboot、linux、根文件系统不作深入理解&#xff0c;能用就行。 重新梳理一下脉络&#xff0c;本…

【29】Word:李楠-学术期刊❗

目录 题目​ NO1.2.3.4.5 NO6.7.8 NO9.10.11 NO12.13.14.15 NO16 题目 NO1.2.3.4.5 另存为手动/F12Fn光标来到开头位置处→插入→封面→选择花丝→根据样例图片&#xff0c;对应位置填入对应文字 (手动调整即可&#xff09;复制样式&#xff1a;开始→样式对话框→管理…

ThinkPHP 8请求处理-获取请求对象与请求上下文

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用Composer初始化ThinkPHP 8应用_thinkphp8 compos…

某书x-s 、x-t 算法 python纯算56版本

文章目录 声明iv的获取key的获取python 算法还原声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除! xhs xs自从2023年5月31号更新之后直到2024年7月之前好像就没有再怎么更新了 但是7月之…

【记录自开发的SQL工具】工具字符拼接、Excel转sql、生成编码、生成测试数据

记录自己开发的一个SQL聚合工具 功能介绍&#xff1a; 文本加引号 给多行文本前后添加引号&#xff0c;并用逗号连接&#xff0c;直接复制到 sql 中的 in 条件中 Excel转SQL 适用于将Excel表格的数据&#xff0c;批量导入到数据库的场景 此工具能快速将excel表格转换为i…

Linux安装mysql5.7

CentOS7安装MySQL&#xff08;完整版&#xff09; - oldmonk - 博客园 下载|安装 下载并安装MySQL官方的 Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm使用上面的命令就直接下载了安装用的Yum Repository&#xff0c;大…

汽车定速巡航

配备定速巡航功能的车型&#xff0c;一般在方向盘附近设有4~6个按键&#xff08;可能共用键位&#xff09;。 要设置定速巡航&#xff0c;不仅需要方向盘上的按键&#xff0c;还要油门配合。 设置的一般流程&#xff1a; 开关&#xff1a;类似步枪上的“保险”&#xff0c;按…

Python 轻松扫描,快速检测:高效IP网段扫描工具全解析

Python 轻松扫描&#xff0c;快速检测&#xff1a;高效IP网段扫描工具全解析 相关资源文件已经打包成EXE文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Python相关程序案例&#xff0c;秉着…

软件测试 —— jmeter(2)

软件测试 —— jmeter&#xff08;2&#xff09; HTTP默认请求头&#xff08;元件&#xff09;元件作用域和取样器作用域HTTP Cookie管理器同步定时器jmeter插件梯度压测线程组&#xff08;Stepping Thread Group&#xff09;参数解析总结 Response Times over TimeActive Thre…

利用 SAM2 模型探测卫星图像中的农田边界

将 Segment Anything Model Version 2 应用于卫星图像以检测和导出农业地区田地边界的分步教程 &#x1f31f; 简介 手动绘制田地边界是最耗时的任务之一&#xff0c;其准确性取决于绘制者的表现。然而&#xff0c;精确的边界检测在很多领域都有应用。例如&#xff0c;假设您…

初步搭建并使用Scrapy框架

目录 目标 版本 实战 搭建框架 获取图片链接、书名、价格 通过管道下载数据 通过多条管道下载数据 下载多页数据 目标 掌握Scrapy框架的搭建及使用&#xff0c;本文以爬取当当网魔幻小说为案例做演示。 版本 Scrapy 2.12.0 实战 搭建框架 第一步&#xff1a;在D:\pyt…

人脸识别打卡系统--基于QT(附源码)

逃离舒适区 项目源代码放在我的仓库中&#xff0c;有需要自取 项目地址 https://gitcode.com/hujiahangdewa/Face_recognition.git 文章目录 一、项目结构分析二、服务器的搭建三、客户端的搭建四、人脸识别库的申请五、基于人脸识别库的识别判断六、QT人脸识别----调用百度ai…

微信小程序中常见的 跳转方式 及其特点的表格总结(wx.navigateTo 适合需要返回上一页的场景)

文章目录 详细说明总结wx.navigateTo 的特点为什么 wx.navigateTo 最常用&#xff1f;其他跳转方式的使用频率总结 以下是微信小程序中常见的跳转方式及其特点的表格总结&#xff1a; 跳转方式API 方法特点适用场景wx.navigateTowx.navigateTo({ url: 路径 })保留当前页面&…

设计模式的艺术-享元模式

结构性模式的名称、定义、学习难度和使用频率如下表所示&#xff1a; 1.如何理解享元模式 当一个软件系统在运行时产生的对象数量太多&#xff0c;将导致运行代价过高&#xff0c;带来系统性能下降等问题。 在享元模式中&#xff0c;存储这些共享实例对象的地方称为享元池&…