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

小Why的密码锁【牛客tracker 每日一题】

小Why的密码锁

时间限制:3秒 空间限制:256M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

W h y WhyWhy拿到了一个密码长度为m mm的密码锁,这个密码锁可输入内容无限,并只对最后输入的m mm位字符进行检测,检测正确时密码锁会解锁一次,同时清空包含检测正确字符串在内的之前的所有字符。

W h y WhyWhy输入了一个长度为n nn的字符串s ss后,密码锁一 共解锁了k kk次,请你告诉他有多少种密码是可能正确的。

输入描述:

第一行包含三个整数n , m , k ( 1 ≤ m ∗ k ≤ n ≤ 10 6 ) n,m,k (1≤m∗k≤n≤10^6)n,m,k(1mkn106),表示字符串s ss的长度,密码长度和解锁次数。

第二行包含一个长度为n nn的字符串s ss,保证字符串s ss中只含有0 ∼ 9 0 ∼ 909的数字。

输出描述:

输出一个整数,表示有多少种密码是可能正确的。

示例1

输入:

13 5 2 1231234123123

输出:

2

说明:

一种可能正确的密码是“ 23123 ” “23123”“23123”:当输入到第6 66位时密码锁第一次解锁,“ 123123 ” “123123”“123123”被全部清空;当输入到第13 1313位时密码锁第二次解锁,“ 4123123 ” “4123123”“4123123”被全部清空。

解题思路

本题核心是字符串哈希预处理 + 合法密码规则校验,高效解决百万级长度字符串的匹配计数问题。根据密码锁解锁规则:合法密码必须在字符串中恰好出现k次,且每次匹配的起始位置 ≥ 上一次匹配的结束位置+1(解锁后清空字符,后续匹配必须从新位置开始)。使用前缀哈希将所有长度为m的子串转化为哈希值,实现O(1)快速查询对比。遍历所有候选子串,用哈希表记录每个密码的上一次结束位置和出现次数,过滤非法匹配。最终统计出现次数恰好为k的密码数量,即为答案。算法时间复杂度O(n),完美适配n≤1e6的大数据约束。

总结

核心逻辑:合法密码需恰好匹配k次,且匹配位置满足解锁清空的间隔要求。
关键操作:前缀哈希快速计算子串哈希值、哈希表记录密码的位置与次数、筛选合法密码。
效率保障:线性预处理+线性遍历,常数级哈希查询,无冗余运算,轻松处理百万级字符串。

代码内容

#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e6+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;constll P=131;chara[N];ll n,m,k;ll p[N],h[N];llget(ll l,ll r){returnh[r]-h[l-1]*p[r-l+1];}intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);map<ll,ll>lst,cnt;cin>>n>>m>>k;cin>>a+1;p[0]=1;for(ll i=1;i<=n;i++){p[i]=p[i-1]*P;h[i]=h[i-1]*P+a[i];}for(ll i=1;i<=n-m+1;i++){ll hs=get(i,i+m-1);if(lst[hs]+m-1>=i&&lst[hs])continue;lst[hs]=i;cnt[hs]++;}ll ans=0;for(autoit:cnt)if(it.second==k)ans++;cout<<ans<<endl;return0;}
http://www.zskr.cn/news/1464537.html

相关文章:

  • 别只盯着物种丰度图了!16S报告里这3个高级功能(LEfSe、FAPROTAX、随机森林)才是发文章的关键
  • arXiv投稿避坑实录:从邮箱注册到.bbl文件,新手必看的5个细节
  • 2026实用降AI工具测评:选这几款高效不踩坑 - 老米_专讲AIGC率
  • Steam挂刀行情站:数据驱动的饰品交易智能决策系统
  • Mythos能力编排层:大模型受控释放的工程实践
  • 2026年知名的哈尔滨系统集成/哈尔滨电子签热选公司推荐 - 行业平台推荐
  • 2026年6月主流企业智能体全维度评测:从智能助手到企业级AI中枢
  • 系统内置apk无法使用 手动安装却可以
  • Moltbot:本地化自动化代理的系统级实践与可信执行设计
  • Java 开发者,不必在 AI 时代感到焦虑
  • Adobe Photoshop Lightroom Classic
  • Unity 滚动球游戏(二)
  • 实战派数据库解决方案,快马ai一键生成企业级管理应用,替代navicat
  • PPS文件怎么改内容?两种实用实操方法
  • Git开发必备技能:从单机笔记到多人协作的版本控制实战
  • JiYuTrainer技术实现:Windows教学管理系统行为调整工具的技术架构与应用指南
  • 抖音开放平台获取用户手机号,Java解密实战(附完整代码与避坑点)
  • 论文创新点怎么“创”?五大方法助你突破创新难关(附提示词)
  • 产教融合视域下 MITCON 网络安全培训项目实践与反钓鱼防御落地研究
  • 测试质量进阶个人笔记--7测试执行与缺陷管理
  • 2026年热门的一站式电商园区/小商品货源园区优选榜单 - 行业平台推荐
  • 避开Matlab机械臂仿真的那些坑:Robotic Toolbox建模与逆解算实战避坑指南
  • 【使用PyQt6与Matplotlib编写交互式生成一元二次函数图形程序】
  • ZYNQ7000 PS端IO不够用?试试用AXI GPIO在Vivado里扩展32个引脚(附完整SDK代码)
  • 从零搭建Python数据分析环境:手把手教你用Jupyter Notebook仪表盘管理你的第一个项目
  • 计算机毕业设计之基于Hive的电影推荐系统的设计与实现
  • 企业AI开发工具身份集成实践与安全架构设计
  • 2026年靠谱的九江工厂短视频拍摄/九江短视频/九江本地短视频线索投放热门公司推荐 - 行业平台推荐
  • 别再被CUDNN_STATUS_NOT_INITIALIZED搞懵了!手把手教你排查PyTorch+CUDA环境(附版本对照表)
  • 别再死记硬背了!用一张时序图彻底搞懂Setup和Hold的检查逻辑