【蓝桥杯集训·每日一题2025】 AcWing 6123. 哞叫时间 python
6123. 哞叫时间
Week 1
2月18日
农夫约翰正在试图向埃尔茜描述他最喜欢的 USACO 竞赛,但她很难理解为什么他这么喜欢它。
他说「竞赛中我最喜欢的部分是贝茜说 『现在是哞哞时间』并在整个竞赛中一直哞哞叫」。
埃尔茜仍然不理解,所以农夫约翰将竞赛以文本文件形式下载,并试图解释他的意思。
竞赛被定义为一个长度为 N N N 的小写字母字符串。
一种哞叫一般地定义为子串 c i c j c j c_ic_jc_j cicjcj,其中某字符 c _ i c\_i c_i 之后紧跟着 2 2 2 个某字符 c j c_j cj,且 c i ≠ c j c_i \neq c_j ci=cj。
根据农夫约翰的说法,贝茜哞叫了很多,所以如果某种哞叫在竞赛中出现了至少 F F F 次,那可能就是贝茜发出的。
然而,农夫约翰的下载可能损坏,文本文件可能存在至多一个字符与原始文件不同。
将可能的误差考虑在内,输出所有可能是贝茜发出的哞叫,按字母顺序排序。
输入格式
输入的第一行包含 N N N 和 F F F,表示字符串的长度以及贝茜的哞叫的频次下限。
第二行包含一个长度为 N N N 的小写字母字符串,表示竞赛。
输出格式
输出可能是贝茜发出的哞叫的数量,以下是按字典序排序的哞叫列表。
每行输出一种哞叫。
数据范围
3 ≤ N ≤ 20000 3 \le N \le 20000 3≤N≤20000,
1 ≤ F ≤ N 1 \le F \le N 1≤F≤N
输入样例1:
10 2
zzmoozzmoo
输出样例1:
1
moo
样例1解释
在这个样例中,任何字符变化都不会影响答案。
唯一贝茜可能发出的哞叫是 moo。
输入样例2:
17 2
momoobaaaaaqqqcqq
输出样例2:
3
aqq
baa
cqq
样例2解释
在这个样例中,位置 8 8 8(从零开始索引)的 a 可能是由 b 损坏导致的,这使得 baa 成为一种贝茜发出两次的可能的哞叫。
此外,位置 11 11 11 的 q 可能是由 c 损坏导致的,这使得 cqq 成为一种贝茜可能的哞叫。
aqq 可以通过将 c 换成 a 来达到。
输入样例3:
3 1
ooo
输出样例3:
25
aoo
boo
coo
doo
eoo
foo
goo
hoo
ioo
joo
koo
loo
moo
noo
poo
qoo
roo
soo
too
uoo
voo
woo
xoo
yoo
zoo
思路:
两种枚举方式:
枚举所有abb形式
时间复杂度O(26 * 25 * n)
枚举能变化一次的字母
时间复杂度O(26*n)
code1:
n, f = map(int, input().split())
s = input()
# 生成所有可能的abb组合
abb = []
for i in range(26):for j in range(26):if i != j:str = chr(ord('a') + i) + chr(ord('a') + j) * 2abb.append(str)# 统计每个abb组合的出现次数
cnt = [0] * (26 * 25)
for i in range(len(abb)):pattern = abb[i]for j in range(n - 2):s1 = s[j:j + 3]if s1 == pattern:cnt[i] += 1# 处理出现次数为f-1的情况
for i in range(len(abb)):if cnt[i] == f - 1:pattern = abb[i]for j in range(n - 2):s1 = s[j:j + 3]# 检查修改是否会影响原有的abb组合sign = 0for x in range(-2, 3):if 0 <= j + x <= n - 3:s2 = s[j + x:j + x + 3]if s2 == pattern:sign = 1breakif sign:continue # 如果会影响原有的abb组合,跳过# 检查当前子串是否可以通过修改一个字符变为abb组合if (s1[0] == pattern[0] and s1[1] == pattern[1]) or \(s1[0] == pattern[0] and s1[2] == pattern[2]) or \(s1[1] == pattern[1] and s1[2] == pattern[2]):cnt[i] += 1break # 只能修改一次ans = []
for i in range(len(abb)):if cnt[i] >= f:ans.append(abb[i])print(len(ans))
for i in sorted(ans):print(i)
code2:
n, f = map(int, input().split())
# 将字符串转换为0-25的数字表示(a-z)
s = [ord(x) - ord('a') for x in input()]# cnt[i][j] 记录ijj出现的次数
cnt = [[0] * 26 for _ in range(26)]
ans = []def update(l, r, c):l = max(l, 0) # 处理左边界r = min(r, n - 1) # 处理右边界for i in range(l, r - 1): # 遍历所有可能的3字符窗口起始位置# 检查是否是abb模式if s[i] != s[i + 1] and s[i + 1] == s[i + 2]:cnt[s[i]][s[i + 2]] += c # 更新对应模式的计数# 如果达到阈值且是增加操作(c=1)if cnt[s[i]][s[i + 2]] >= f and c == 1:# 转换为字符串形式ans.append(chr(ord('a') + s[i]) + chr(ord('a') + s[i + 2]) * 2)update(0, n - 1, 1)for i in range(n): # 遍历每个可能修改的位置temp = s[i] # 保存原始字符# 第一步:消除当前字符对周围的影响(c=-1)update(i - 2, i + 2, -1) # 修改会影响前后2个位置的模式# 尝试修改为其他字符for j in range(26):if s[i] != j: # 跳过与原字符相同的情况s[i] = j # 临时修改字符# 第二步:计算修改后的影响(c=1)update(i - 2, i + 2, 1) # 添加新字符的影响update(i - 2, i + 2, -1) # 恢复现场s[i] = temp # 恢复原始字符# 第三步:重新统计原始字符的影响(c=1)update(i - 2, i + 2, 1)
# 去重并排序结果
ans = sorted(set(ans))
print(len(ans))
for i in ans:print(i)
代码逻辑解释:
-
预处理阶段:
- 将输入字符串转换为数字形式(a->0, b->1…),方便处理
- 初始化二维计数数组
cnt,用于统计每个abb模式的出现次数
-
核心函数
update:- 作用:在指定区间内扫描所有abb模式,并更新计数器
- 参数
c控制增加(1)或减少(-1)计数 - 通过滑动窗口(每次检查3个字符)的方式遍历区间
-
主处理流程:
- 初始统计:调用
update(0, n-1, 1)统计原始字符串中的所有abb模式 - 遍历每个字符位置:
- 先消除当前字符对周围5个字符范围(i-2到i+2)的影响
- 尝试将该位置修改为其他25个字母(共26种可能)
- 对每种可能的修改:
- 临时修改字符
- 计算修改后的影响(会覆盖前后5个字符范围)
- 立即回滚修改(为了不影响后续测试其他字符)
- 最后恢复原始字符并重新统计其影响
- 初始统计:调用
-
结果处理:
- 使用set去重(可能重复添加相同模式)
- 按字典序排序后输出
关键优化点:
- 局部更新:只处理受修改影响的区域(i-2到i+2),而不是全盘重新扫描,将时间复杂度从O(n^2)降低到O(n)
- 即时回滚:在测试每个可能的字符修改时,立即回滚修改状态,避免创建多个字符串副本
END
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢
相关文章:
【蓝桥杯集训·每日一题2025】 AcWing 6123. 哞叫时间 python
6123. 哞叫时间 Week 1 2月18日 农夫约翰正在试图向埃尔茜描述他最喜欢的 USACO 竞赛,但她很难理解为什么他这么喜欢它。 他说「竞赛中我最喜欢的部分是贝茜说 『现在是哞哞时间』并在整个竞赛中一直哞哞叫」。 埃尔茜仍然不理解,所以农夫约翰将竞赛以…...
数据治理中 大数据处理一般都遵循哪些原则
在数据治理中,大数据处理通常遵循以下原则: 最小化原则:企业应只收集实现特定目的所需的数据,避免数据冗余和安全风险。 合法性原则:企业必须遵守相关法律法规,确保数据处理符合法律要求,降低法…...
Linux 多进程生产者消费者模型实现
Linux 多进程生产者消费者模型实现 一、模型核心组件二、关键代码解析1. 信号量封装类(csemp)2. 共享内存初始化3. 生产者核心逻辑4. 消费者核心逻辑 三、关键同步机制信号量使用策略操作时序图 四、扩展知识1. System V与POSIX信号量对比2. 共享内存最佳…...
【Python pro】基本数据类型
一、数字类型 1.1 数字类型的组成 1.1.1 整数 (1)十进制,二进制0b,八进制0o,十六进制0x print(16 0b10000 0o20 0x10) # 输出:True(2)十进制转其他进制 a bin(16) b oct(1…...
sql server查询IO消耗大的排查sql诊断语句
原文链接: sql server查询IO消耗大的排查sql诊断语句-S3软件[code]select top 50 (total_logical_reads/execution_count) as avg_logical_reads , (total_logical_writes/execution_count) as avg_logical_writes , (tota ... https://blog.s3.sh.cn/thread-120-1…...
Spring Boot 自动装配原理深度剖析
一、引言 在 Java 开发领域,Spring 框架无疑是中流砥柱。而 Spring Boot 的出现,更是极大地简化了 Spring 应用的搭建和开发过程。其中,自动装配原理是 Spring Boot 的核心亮点之一,它让开发者无需手动编写大量繁琐的配置代码&am…...
kubernetes源码分析 kubelet
简介 从官方的架构图中很容易就能找到 kubelet 执行 kubelet -h 看到 kubelet 的功能介绍: kubelet 是每个 Node 节点上都运行的主要“节点代理”。使用如下的一个向 apiserver 注册 Node 节点:主机的 hostname;覆盖 host 的参数࿱…...
Golang学习笔记_33——桥接模式
Golang学习笔记_30——建造者模式 Golang学习笔记_31——原型模式 Golang学习笔记_32——适配器模式 文章目录 桥接模式详解一、桥接模式核心概念1. 定义2. 解决的问题3. 核心角色4. 类图 二、桥接模式的特点三、适用场景1. 多维度变化2. 跨平台开发3. 动态切换实现 四、与其他…...
使用EasyExcel和多线程实现高效数据导出
使用EasyExcel和多线程实现高效数据导出 1. 概述 在企业级应用中,数据导出是一个常见的需求。为了提高导出效率,尤其是在处理大量数据时,我们可以结合使用EasyExcel库和多线程技术。本文将详细介绍如何通过EasyExcel和多线程技术实现高…...
告别冷冰冰:如何训练AI写出温暖人心的广告文案
朋友们,你们是不是也好奇过,如果让AI来写广告文案,会是什么效果? 是冷冰冰的数据堆砌,还是也能玩出创意和温度? 别担心,今天我就来给你揭秘,怎么调教AI,让它写出的广告…...
【js逆向_入门】图灵爬虫练习平台 第四题
(base64解码)地址:aHR0cHM6Ly9zdHUudHVsaW5ncHl0b24uY24vcHJvYmxlbS1kZXRhaWwvNC8 请求接口带有加密参数: 全局搜索Sign,找到参数生成位置 一目了然,知道参数是怎么构造生成的 调试代码 测试验证思路是否正确 时间: …...
Mybatis后端数据库查询多对多查询解决方案
问题场景: 我开发的是一个论文选择系统。 后端用一个论文表paper来存储论文信息。 论文信息中,包含前置课程,也就是你需要修过这些课程才能选择这个论文。 而一个论文对应的课程有很多个。 这样就造成了一个数据库存储的问题。一个paper…...
记一次 Git Fetch 后切换分支为空的情况
Git Fetch 后切换分支为空的情况 在使用 Git 时,我遇到这样的情况:执行 git fetch 后切换分支,发现工作目录是空的,没有任何文件,所以插眼记录一下。 原因分析 git fetch 的作用:git fetch 只会从远程仓库…...
【MySQL排错 】mysql: command not found 数据库安装后无法加载的解决办法
【MySQL排错 】mysql: command not found 数据库安装后无法加载的解决办法 A Solution to Solve Error - mysql: command not found After The Installation of MySQL Community Server By JacksonML 本文简要介绍如何在macOS安装完毕MySQL数据库服务器后,针对无…...
分享一款AI绘画图片展示和分享的小程序
🎨奇绘图册 【开源】一款帮AI绘画爱好者维护绘图作品的小程序 查看Demo 反馈 github 文章目录 前言一、奇绘图册是什么?二、项目全景三、预览体验3.1 截图示例3.2 在线体验 四、功能介绍4.1 小程序4.2 服务端 五、安装部署5.1 快速开始~~5.2 手动部…...
大模型知识蒸馏技术(4)——离线蒸馏
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl离线蒸馏概述 离线蒸馏是知识蒸馏中最早被提出且最为常见的实现方式,其核心在于教师模型和学生模型的训练是分阶段进行的。具体而言,教师模型首先在训练集上进行充分训练,直至收敛,然后利用教…...
解决DeepSeek服务器繁忙的有效方法
全球42%的企业遭遇过AI工具服务器过载导致内容生产中断(数据来源:Gartner 2025)。当竞品在凌晨3点自动发布「智能家居安装指南」时,你的团队可能正因DeepSeek服务器繁忙错失「净水器保养教程」的流量黄金期⏳。147SEO智能调度系统…...
【C++游戏开发-五子棋】
使用C开发五子棋游戏的详细实现方案,涵盖核心逻辑、界面设计和AI对战功能: 1. 项目结构 FiveChess/ ├── include/ │ ├── Board.h // 棋盘类 │ ├── Player.h // 玩家类 │ ├── AI.h // AI类 │ └── Game.h // 游戏主逻辑 ├── src/ …...
Ubuntu 下 nginx-1.24.0 源码分析 - NGX_MAX_ALLOC_FROM_POOL
NGX_MAX_ALLOC_FROM_POOL 定义在 src\core\ngx_palloc.h #define NGX_MAX_ALLOC_FROM_POOL (ngx_pagesize - 1) 在 src/os/unix/ngx_alloc.h extern ngx_uint_t ngx_pagesize; 这个全局变量定义在 src\os\unix\ngx_alloc.c 中 ngx_uint_t ngx_pagesize; 在 src/os/unix/ngx_…...
等距节点插值公式
目录 等距节点插值公式Newton 前插公式Newton 后插公式 等距节点插值公式 将 Newton 差商插值多项式中各阶差商用相应差分代替,就可得到各种形式的等距节点插值公式,例如常用的前插公式与后插公式。 Newton 前插公式 如果节点 x k x 0 k h ( k 0 , …...
BT401双模音频蓝牙模块如何开启ble的透传,有什么注意事项
BT401音频蓝牙模块如何开启ble的透传? 首先BT401的蓝牙音频模块,分为两个版本,dac版本和iis数字音频版本 DAC版本:就是BT401蓝牙模块【9和10脚】直接输出模拟音频信号,也就是说,直接推动耳机可以听到声音 …...
基于SSM框架的宠物之家系统(有源码+论文!!!)
这个系统可以帮助大家去做设计或者学习,大家可以管我要word版论文🥰这里具体论文内照片、e-r图等等加载不进来, 大家如果想要源码+论文+制定+调试,可以私信我!!(可改别的系统,例如调查问卷系统等等) 目录 第1章 绪论 1.1开发背景 1.2开发工具及语言 第2章 宠物之家系…...
计算机视觉+Numpy和OpenCV入门
Day 1:Python基础Numpy和OpenCV入门 Python基础 变量与数据类型、函数与类的定义、列表与字典操作文件读写操作(读写图像和数据文件) 练习任务:写一个Python脚本,读取一个图像并保存灰度图像。 import cv2 img cv2.im…...
深入理解正则表达式的预查
深入理解正则表达式的预查(Lookahead and Lookbehind) 在正则表达式中,预查(Lookahead and Lookbehind)是一种强大的工具,允许你在不消耗字符的情况下进行匹配检查。预查可以分为四种类型:正向肯定预查、正向否定预查、反向肯定预查和反向否定预查。 1. 正向肯定预查(…...
网工项目理论1.7 设备选型
本专栏持续更新,整一个专栏为一个大型复杂网络工程项目。阅读本文章之前务必先看《本专栏必读》。 一.交换机选型要点 制式:盒式交换机/框式交换机。功能:二层交换机/三层交换机。端口密度:每交换机可以提供的端口数量。端口速率:百兆/千兆/万兆。交换容量:交换矩阵…...
Gateway中的Filter机制
Gateway中的Filter机制 文章目录 Gateway中的Filter机制Gateway中的Filter机制Gateway Filter 机制的概述核心思想与设计Filter 的两种类型过滤器的生命周期Gateway Filter 的特点Gateway Filter 的意义Gateway Filter 的工作原理核心架构与执行流程执行流程解析过滤器类型的角…...
顺序表常用操作和笔试题
1、顺序表的常用操作 1.1 顺序表的创建 如下代码所示:创建了一个默认空间为10的整型顺序表,如果空间不足则会以1.5倍扩容。 List<Integer> list new ArrayList<>(); 创建一个空间为15的整型顺序表 List<Integer> list2 new ArrayL…...
二.数据治理流程架构
1、数据治理流程架构核心思想: 该图描绘了一个以数据标准规范体系为核心,大数据生命周期管理为主线,数据资源中心为依托,并辅以数据质量管理和大数据安全与隐私管理的数据治理流程架构。它旨在通过规范化的流程和技术手段&#x…...
【Java】泛型与集合篇(二)
泛型与集合(二) Set 接口及实现类HashSet 类特点内部实现构造方法LinkedHashSet 类基本概念特点构造方法常用方法适用场景用 Set 对象实现集合运算TreeSet 类特性构造方法常用方法注意事项对象顺序自然排序定制排序注意事项Queue 接口及实现类Queue 接口定义与特点常用方法常…...
解锁机器学习核心算法 | 线性回归:机器学习的基石
在机器学习的众多算法中,线性回归宛如一块基石,看似质朴无华,却稳稳支撑起诸多复杂模型的架构。它是我们初涉机器学习领域时便会邂逅的算法之一,其原理与应用广泛渗透于各个领域。无论是预测房价走势、剖析股票市场波动࿰…...
