当前位置: 首页 > 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.jsqmd.com/news/952920/

相关文章:

  • Inference与Prediction的本质区别:从机器学习工程实践看系统层与算法层的分界
  • 从Hello World到第一个项目:用VS Code + Rust-Analyzer插件打造你的高效Rust工作流
  • 别只盯着物种丰度图了!16S报告里这3个高级功能(LEfSe、FAPROTAX、随机森林)才是发文章的关键
  • JSON对比终极指南:3分钟掌握可视化差异分析神器
  • 2026年四川商用摆摊大伞/岗亭遮阳伞公司对比推荐 - 行业平台推荐
  • 115. 全机型救砖方案汇总|高通EDL/MTK刷写/苹果DFU黑砖修复实操教程
  • Claude深度集成开发工作流:工程化上下文管理实践
  • arXiv投稿避坑实录:从邮箱注册到.bbl文件,新手必看的5个细节
  • 2026实用降AI工具测评:选这几款高效不踩坑 - 老米_专讲AIGC率
  • 2026年评价高的哈尔滨收银系统/哈尔滨小程序开发/哈尔滨GEO/哈尔滨电子签品质保障公司 - 品牌宣传支持者
  • Steam挂刀行情站:数据驱动的饰品交易智能决策系统
  • 多维聚合实战:从OLAP立方体构建到实时聚合优化
  • Mythos能力编排层:大模型受控释放的工程实践
  • 2026年6月主流企业智能体全维度评测:从智能助手到企业级AI中枢
  • 2026年靠谱的郑州家装淋浴房/淋浴房/郑州成品淋浴房/郑州民宿淋浴房高口碑品牌推荐 - 品牌宣传支持者
  • 系统内置apk无法使用 手动安装却可以
  • 2026年知名的哈尔滨系统集成/哈尔滨电子签热选公司推荐 - 行业平台推荐
  • 单卡RTX 4090微调20B多语言大模型做推理训练实战
  • 从充电场站到干线物流:千方 ESG 报告里的多场景节能探索
  • 百度网盘全速下载终极指南:告别限速,轻松获取文件
  • Java 开发者,不必在 AI 时代感到焦虑
  • Moltbot:本地化自动化代理的系统级实践与可信执行设计
  • 2026年热门的太阳伞/岗亭遮阳伞长期合作厂家推荐 - 品牌宣传支持者
  • 从PHM 2012挑战赛看工业预测性维护:如何用轴承振动数据训练你的第一个RUL模型
  • Adobe Photoshop Lightroom Classic
  • Unity 滚动球游戏(二)
  • 快速验证物联网想法:用快马一键生成esp8266 wifi连接原型代码
  • Navicat连Oracle 11g报错ORA-28547?别慌,手把手教你替换oci.dll文件搞定
  • 实战派数据库解决方案,快马ai一键生成企业级管理应用,替代navicat
  • PPS文件怎么改内容?两种实用实操方法