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.mzph.cn/web/66901.shtml

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

相关文章

记录一次k8s起不来的排查过程

我在k8s集群&#xff0c;重启了一个node宿主机&#xff0c;竟然发现kubelet起不来了&#xff01;报错如下 这个报错很模糊&#xff0c;怎么排查呢。这样&#xff0c;开两个界面&#xff0c;一个重启kubelet&#xff0c;一个看系统日志(/var/log/message:centos&#xff0c;/va…

仿 RabbitMQ 的消息队列3(实战项目)

七. 消息存储设计 上一篇博客已经将消息统计文件的读写代码实现了&#xff0c;下一步我们将实现创建队列文件和目录。 实现创建队列文件和目录 初始化 0\t0 这样的初始值. //创建队列对应的文件和目录&#xff1a;public void createQueueFile(String queueName) throws IO…

HTTP 配置与应用(局域网)

想做一个自己学习的有关的csdn账号&#xff0c;努力奋斗......会更新我计算机网络实验课程的所有内容&#xff0c;还有其他的学习知识^_^&#xff0c;为自己巩固一下所学知识&#xff0c;下次更新HTTP 配置与应用&#xff08;不同网段&#xff09;。 我是一个萌新小白&#xf…

大模型应用与部署 技术方案

大模型应用与部署 技术方案 一、引言 人工智能蓬勃发展,Qwen 大模型在自然语言处理领域地位关键,其架构优势尽显,能处理文本创作等多类复杂任务,提供优质交互。Milvus 向量数据库则是向量数据存储检索利器,有高效索引算法(如 IVF_FLAT、HNSWLIB 等)助力大规模数据集相似…

【Prometheus】Prometheus如何监控Haproxy

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Go语言中的值类型和引用类型特点

一、值类型 值类型的数据直接包含值&#xff0c;当它们被赋值给一个新的变量或者作为参数传递给函数时&#xff0c;实际上是创建了原值的一个副本。这意味着对新变量的修改不会影响原始变量的值。 Go中的值类型包括&#xff1a; 基础类型&#xff1a;int&#xff0c;float64…

GPT 结束语设计 以nanogpt为例

GPT 结束语设计 以nanogpt为例 目录 GPT 结束语设计 以nanogpt为例 1、简述 2、分词设计 3、结束语断点 1、简述 在手搓gpt的时候&#xff0c;可能会遇到一些性能问题&#xff0c;即关于是否需要全部输出或者怎么节约资源。 在输出语句被max_new_tokens 限制&#xff0c…

深入MapReduce——计算模型设计

引入 通过引入篇&#xff0c;我们可以总结&#xff0c;MapReduce针对海量数据计算核心痛点的解法如下&#xff1a; 统一编程模型&#xff0c;降低用户使用门槛分而治之&#xff0c;利用了并行处理提高计算效率移动计算&#xff0c;减少硬件瓶颈的限制 优秀的设计&#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目录…

五国十五校联合巨献!仿人机器人运动与操控:控制、规划与学习的最新突破与挑战

作者&#xff1a; Zhaoyuan Gu, Junheng Li, Wenlan Shen, Wenhao Yu, Zhaoming Xie, Stephen McCrory, Xianyi Cheng, Abdulaziz Shamsah, Robert Griffin, C. Karen Liu, Abderrahmane Kheddar, Xue Bin Peng, Yuke Zhu, Guanya Shi, Quan Nguyen, Gordon Cheng, Huijun Gao,…

【BQ3568HM开发板】如何在OpenHarmony上通过校园网的上网认证

引言 前面已经对BQ3568HM开发板进行了初步测试&#xff0c;后面我要实现MQTT的工作&#xff0c;但是遇到一个问题&#xff0c;就是开发板无法通过校园网的认证操作。未认证的话会&#xff0c;学校使用的深澜软件系统会屏蔽所有除了认证用的流量。好在我们学校使用的认证系统和…

(Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计

源码 论文 下载地址&#xff1a; ​​​​c​​​​​​c基于JAVA的网络通讯系统设计与实现(源码系统论文&#xff09;https://download.csdn.net/download/weixin_39682092/90299782https://download.csdn.net/download/weixin_39682092/90299782 第1章 绪论 1.1 课题选择的…

SpringCloud微服务Gateway网关简单集成Sentinel

Sentinel是阿里巴巴开源的一款面向分布式服务架构的轻量级流量控制、熔断降级组件。Sentinel以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度来帮助保护服务的稳定性。 官方文档&#xff1a;https://sentinelguard.io/zh-cn/docs/introduction.html …

vscode环境中用仓颉语言开发时调出覆盖率的方法

在vscode中仓颉语言想得到在idea中利用junit和jacoco的覆盖率&#xff0c;需要如下几个步骤&#xff1a; 1.在vscode中搭建仓颉语言开发环境&#xff1b; 2.在源代码中右键运行[cangjie]coverage. 思路1&#xff1a;编写了测试代码的情况&#xff08;包管理工具&#xff09; …

pikachu靶场-敏感信息泄露概述

敏感信息泄露概述 由于后台人员的疏忽或者不当的设计&#xff0c;导致不应该被前端用户看到的数据被轻易的访问到。 比如&#xff1a; ---通过访问url下的目录&#xff0c;可以直接列出目录下的文件列表; ---输入错误的url参数后报错信息里面包含操作系统、中间件、开发语言的版…

安卓动态设置Unity图形API

命令行方式 Unity图像api设置为自动,安卓动态设置Vulkan、OpenGLES Unity设置 安卓设置 创建自定义活动并将其设置为应用程序入口点。 在自定义活动中,覆盖字符串UnityPlayerActivity。updateunitycommandlineararguments (String cmdLine)方法。 在该方法中,将cmdLine…

低代码可视化-转盘小游戏可视化-代码生成器

转盘小程序是一种互动工具&#xff0c;它通过模拟真实的转盘抽奖或决策体验&#xff0c;为用户提供了一种有趣且公平的选择方式。以下是对转盘小程序的详细介绍&#xff1a; 转盘小程序的应用场景 日常决策&#xff1a;转盘小程序可以帮助用户解决日常生活中的选择困难问题&a…

MongoDB文档查询

一、实验目的 1. 理解MongoDB文档数据库的基本概念和特性。 2. 掌握在MongoDB中创建集合和插入文档数据的方法。 3. 学习使用MongoDB进行文档查询操作&#xff0c;包括查询、过滤和排序等。 二、实验环境准备 1. JAVA环境准备&#xff1a;确保Java Development Kit (J…

速通Docker === 使用最佳实践总结

目录 主要使用步骤 1. 命令 2. 网络 3. 存储 卷存储&#xff08;Volumes&#xff09; 目录挂载&#xff08;Bind Mounts&#xff09; 比较 4. 环境变量 5. 端口 示例&#xff1a;启动 MySQL 容器 解释&#xff1a; 总结 Docker 是一个开源的应用容器引擎&#xff0…

Postgresql源码(140)理解PG的编译流程(make、Makefile、Makefile.global.in)

PG16 PG中使用的makefile看起来代码比较多&#xff0c;但是实际逻辑比较简单&#xff0c;这里做一些抽象总结。 总结 Makefile.global.in的$(recurse)宏自动生成了target&#xff0c;可以方便的进入内存目录进行编译。 all: all-common-recurse all-common-recurse: submak…