NC23053 月月查华华的手机
NC23053 月月查华华的手机
题目
题目描述
月月和华华一起去吃饭了。期间华华有事出去了一会儿,没有带手机。月月出于人类最单纯的好奇心,打开了华华的手机。哇,她看到了一片的QQ推荐好友,似乎华华还没有浏览过。月月顿时醋意大发,出于对好朋友的关心,为了避免华华浪费太多时间和其他网友聊天,她要删掉一些推荐好友。但是为了不让华华发现,产生猜疑,破坏了他们的友情,月月决定只删华华有可能搭讪的推荐好友。
月月熟知华华搭讪的规则。华华想与某个小姐姐搭讪,当且仅当小姐姐的昵称是他的昵称的子序列。为了方便,华华和小姐姐的昵称只由小写字母构成。为了更加方便,保证小姐姐的昵称长度不会比华华的长。
现在月月要快速的判断出哪些推荐好友要删掉,因为华华快回来了,时间紧迫,月月有点手忙脚乱,所以你赶紧写个程序帮帮她吧!
输入描述
第一行输入一个字符串 \(A\) 表示华华的昵称。
第二行输入一个正整数 \(N\) 表示华华的推荐好友的个数。
接下来 \(N\) 行,每行输入一个字符串 \(B_i\) 表示某个推荐好友的昵称。
输出描述
输出 \(N\) 行,对于第 \(i\) 个推荐好友,如果华华可能向她搭讪,输出 Yes
,否则输出 No
。
注意大写,同时也要注意输出效率对算法效率的影响。
示例1
输入
noiauwfaurainairtqltqlmomomo
8
rain
air
tql
ntt
xiaobai
oiiiooo
orzcnzcnznb
ooooo
输出
Yes
Yes
Yes
Yes
No
Yes
No
No
备注
\(1\le|A|\le10^6\) ,\(1\le N\le10^6\),\(1\le\sum_{i=1}^NB_i\le10^6\)
题解
思路
知识点:指针优化。
如果对每个待匹配字符串 \(B_i\) 都用普通双指针搜索一遍完整的字符串 \(A\) ,那么时间复杂度将会是 \(O(\lvert A \rvert N)\) ,显然是不行的。(但不知道为什么这里能过而且还比正解快QWQ)。
因为每次都是对同一个字符串匹配,可以考虑整合字符串中有用的信息优化双指针的遍历。我们希望每次在字符串 \(A\) 的指针能更快的到达下一个需要并且存在的字母,即需要预处理某字母当前位置往后第一个位置。因此,考虑用数组 \(nxt[i][j]\) 表示第 \(i\) 位往后第一次出现字母 \((j+'a')\) 的位置。
因为需要知道最近一次的出现的位置,正着预处理肯定不好因为无法确定某个位置下一个某字母出现在哪里,而可以倒着预处理可以解决这个问题,因为后面的都已经遍历过了(大部分处理下一个位置枚举都是逆着来的),考虑用数组 \(last[i]\) 表示目前字母 \((i+'a')\) 最近的位置。注意在一个位置 \(i\) 要先将 \(last[0 \cdots 25 ]\) 赋给 \(nxt[i][0 \cdots 25]\) ,再处理 \(last\) ,不存在就赋值为 \(-1\)。
最后,遍历 \(B_i\) 注意一些小细节即可。
时间复杂度 \(O(\lvert A \rvert + N)\)
空间复杂度 \(O(\lvert A \rvert)\)
代码
#include <bits/stdc++.h>
using namespace std;
int last[26+7];
int nxt[1000007][26+7];
int main(){
string str;
cin>>str;
memset(last,-1,sizeof(last));
for(int i = str.length()-1;i>=0;i--){
for(int j = 0;j<26;j++){
nxt[i][j] = last[j];
}
last[str[i]-'a'] = i;
}
int n;
cin>>n;
while(n--){
string s;
cin>>s;
int pos = last[s[0]-'a'];///先手动找到第一个起始位置,后面迭代即可
bool ok = ~pos;
for(int i = 1;i<s.length() && ok;i++) ok = ~(pos = nxt[pos][s[i]-'a']);
if(ok) cout<<"Yes"<<'\n';
else cout<<"No"<<'\n';
}
return 0;
}
NC23053 月月查华华的手机的更多相关文章
- 牛客小白月赛12 J 月月查华华的手机(序列自动机)
---恢复内容开始--- 题目来源:https://ac.nowcoder.com/acm/contest/392/J 题意: 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机. ...
- 牛客小白月赛12 J 月月查华华的手机 (序列自动机模板题)
链接:https://ac.nowcoder.com/acm/contest/392/J 来源:牛客网 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机.月月出于人类最单纯的好奇 ...
- Newcoder 华华给月月出题(线筛)题解
题目描述: 华华刚刚帮月月完成了作业.为了展示自己的学习水平之高超,华华还给月月出了一道类似的题: Ans=⊕Ni=1(iNmod(109+7))Ans=⊕i=1N(iNmod(109+7)) ⊕⊕符 ...
- 牛客网 牛客小白月赛12 B.华华教月月做数学-A^B mod P-快速幂+快速乘
链接:https://ac.nowcoder.com/acm/contest/392/B来源:牛客网 华华教月月做数学 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...
- E.华华给月月准备礼物
链接:https://ac.nowcoder.com/acm/contest/392/E 题意: 二月中旬虐狗节前夕,华华决定给月月准备一份礼物.为了搭建礼物的底座,华华需要若干根同样长的木棍.华华手 ...
- B.华华教月月做数学
链接:https://ac.nowcoder.com/acm/contest/392/B 题意: 找到了心仪的小姐姐月月后,华华很高兴的和她聊着天.然而月月的作业很多,不能继续陪华华聊天了.华华为了尽 ...
- 牛客小白月赛12 D 月月给华华出题 (欧拉函数,数论,线筛)
链接:https://ac.nowcoder.com/acm/contest/392/D 来源:牛客网 月月给华华出题 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K, ...
- 牛客小白月赛12 C 华华给月月出题 (积性函数,线性筛)
链接:https://ac.nowcoder.com/acm/contest/392/C 来源:牛客网 华华给月月出题 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K, ...
- NC23046 华华教月月做数学
NC23046 华华教月月做数学 题目 题目描述 找到了心仪的小姐姐月月后,华华很高兴的和她聊着天.然而月月的作业很多,不能继续陪华华聊天了.华华为了尽快和月月继续聊天,就提出帮她做一部分作业. 月月 ...
随机推荐
- 从零搭建Pytorch模型教程(三)搭建Transformer网络
前言 本文介绍了Transformer的基本流程,分块的两种实现方式,Position Emebdding的几种实现方式,Encoder的实现方式,最后分类的两种方式,以及最重要的数据格式的介绍. ...
- delaycall.js 修改表单延迟自动提交的 jQuery / Zepto 插件
delaycall.js delaycall 是一个 jQuery / Zepto 插件,用于在用户完成某项操作后,延迟指定秒数后自动调动指定函数.如用户输入完内容后,延迟1秒,自动提交表单. Git ...
- oracle提交后再回滚解决办法
BEGIN; 刚才改错数据,直接commit了,rollback了下,没效果,经过google,oracle有个 闪回 功能,经测试,可用. -- 查询闪回id 如:06001B00054E0000 ...
- 基于知名微服务框架go-micro开发gRPC应用程序
go-micro是golang的一个微服务框架. go-micro各个版本之间的兼容性问题一直被诟病,前几年go-micro更是分化出了两个分支: 一个延续了go-micro,只不过转到了其公司CEO ...
- 服务器 CPU 100% 异常排查实践与总结
一个执着于技术的公众号 问题背景 昨天下午突然收到运维邮件报警,显示数据平台服务器cpu利用率达到了98.94%,而且最近一段时间一直持续在70%以上,看起来像是硬件资源到瓶颈需要扩容了,但仔细思考就 ...
- 开源框架 WebFirst 一键生成项目,在线建表
1.WebFirst框架描述 WebFirst 是果糖大数据团队开发的新一代 高性能 代码生成器&数据库设计工具,由.net core 3.1 + sqlsugar 开发 导入1000个表只 ...
- FTP主动模式上传文件时返回"ftp: accept: Resource temporarily unavailable"
FTP主动模式上传文件时返回 Passive mode off ftp: accept: Resource temporarily unavailable 这个问题要从ftp的2种模式说起 PORT ...
- 一个关于 useState 的误解
一个关于 useState 的误解 本文写于 2020 年 11 月 17 日 前两天有人问了我一个问题,他有一段这样的代码: function App() { const [n, setN] = u ...
- 基于SqlSugar的开发框架循序渐进介绍(3)-- 实现代码生成工具Database2Sharp的整合开发
我喜欢在一个项目开发模式成熟的时候,使用代码生成工具Database2Sharp来配套相关的代码生成,对于我介绍的基于SqlSugar的开发框架,从整体架构确定下来后,我就着手为它们量身定做相关的代码 ...
- 九种常见UML图(分类+图解)
九种常见UML图 1.类图 概述 类图(Class Diagram)是面向对象系统建模中最常用和最重要的图,是定义其它图的基础. 类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静 ...