news 2026/6/5 4:36:04

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小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;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 4:29:56

OpenCV工业数据采集:参数锁定、触发同步与质量闭环

1. 项目概述&#xff1a;用OpenCV做数据采集&#xff0c;不是写个cv2.VideoCapture就完事了“Data Collection Using OpenCV”这个标题看起来平平无奇&#xff0c;甚至有点像某门课设的作业名——但如果你真把它当成“调个摄像头拍几张图”的小活儿来干&#xff0c;等你把模型训…

作者头像 李华
网站建设 2026/6/5 4:28:06

Sqribble模板驱动型PDF生成原理与实战指南

1. 项目概述&#xff1a;这不是“一键生成”&#xff0c;而是一套被精心封装的文档流水线你有没有过这种经历&#xff1a;手头有一篇写得不错的博客文章&#xff0c;老板突然说“赶紧做成个PDF小册子&#xff0c;下午发给客户”&#xff1b;或者团队刚整理完一份产品使用指南&a…

作者头像 李华
网站建设 2026/6/5 4:21:10

用快马平台快速生成交互式广告原型,十分钟搞定创意验证

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请生成一个交互式广告横幅的网页代码&#xff0c;要求包含以下功能&#xff1a;1、一个吸引眼球的动画标题&#xff0c;使用CSS关键帧实现文字渐入和颜色渐变效果。2、一个产品展示…

作者头像 李华
网站建设 2026/6/5 4:15:06

如何高效记录(非记忆)英文单词SOP

每次看英文文章、英文文献是否经常遇到生词和新鲜表达&#xff1f;你是否会因为找不到合适的方法记录单词而困扰&#xff1f;本文尝试给这一问题给出解决方案。 如何高效记录英文中的生鲜表达&#xff0c;方便人们日常的随时抽取和记忆是英语学习者必须要做好的功课。本文尝试…

作者头像 李华