链接:https://ac.nowcoder.com/acm/contest/392/J
来源:牛客网

题目描述
月月和华华一起去吃饭了。期间华华有事出去了一会儿,没有带手机。月月出于人类最单纯的好奇心,打开了华华的手机。哇,她看到了一片的QQ推荐好友,似乎华华还没有浏览过。月月顿时醋意大发,出于对好朋友的关心,为了避免华华浪费太多时间和其他网友聊天,她要删掉一些推荐好友。但是为了不让华华发现,产生猜疑,破坏了他们的友情,月月决定只删华华有可能搭讪的推荐好友。
月月熟知华华搭讪的规则。华华想与某个小姐姐搭讪,当且仅当小姐姐的昵称是他的昵称的子序列。为了方便,华华和小姐姐的昵称只由小写字母构成。为了更加方便,保证小姐姐的昵称长度不会比华华的长。
现在月月要快速的判断出哪些推荐好友要删掉,因为华华快回来了,时间紧迫,月月有点手忙脚乱,所以你赶紧写个程序帮帮她吧!
输入描述:
第一行输入一个字符串A表示华华的昵称。
第二行输入一个正整数N表示华华的推荐好友的个数。
接下来N行,每行输入一个字符串B_iB
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^61≤∣A∣≤10
6
,1\le N\le10^61≤N≤10
6
,1\le\sum_{i=1}^NB_i\le10^61≤∑
i=1
N

B
i

≤10
6

思路:

本题是序列自动机模板题,

来讲解一下序列自动机是一个什么东西,

其实就是一个数组
nxt[ |str| ] [ |S| ] | str | 是字符串的最大长度, 而 | S | 是字符集合的元素个数。

我们对于母穿进行预处理 nxt数组,

nxt[i][j] 表示 第i个位置后面最近的j字符的下标。如果没有就是0。

获得的方法很简单,我们只需要从后向前扫一边类似dp的方法转移一下即可。

当一个子串来尝试匹配为母串的子序列时,只需要顺着nxt数组转移即可,当找不到需要的字符,即匹配到下标为0时(因为母串读入的时候从下标1开始读入字符),表示匹配失败。

返回失败即可。

细节见代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll powmod(ll a,ll b,ll MOD){ll ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
inline void getInt(int* p);
const int maxn=1000010;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/int nxt[maxn][30];
char s[maxn];
int len;
void init()
{for(int i=len;i>=1;--i){for(int j=0;j<=25;++j){nxt[i-1][j]=nxt[i][j];}nxt[i-1][s[i]-'a']=i;}
}
char t[maxn];
int main()
{//freopen("D:\\common_text\\code_stream\\in.txt","r",stdin);//freopen("D:\\common_text\\code_stream\\out.txt","w",stdout);scanf("%s",s+1);len=strlen(s+1);int q;init();scanf("%d",&q);while(q--){scanf("%s",t);int len1=strlen(t);int isok=1;for(int now=0,i=0;i<len1;++i){now=nxt[now][t[i]-'a'];if(!now){isok=0;break;}}if(isok){puts("Yes");}else{puts("No");}}return 0;
}inline void getInt(int* p) {char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}}else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}}
}

转载于:https://www.cnblogs.com/qieqiemin/p/11355472.html

牛客小白月赛12 J 月月查华华的手机 (序列自动机模板题)相关推荐

  1. 牛客小白月赛12 D 月月给华华出题 (欧拉函数,数论,线筛)

    链接:https://ac.nowcoder.com/acm/contest/392/D 来源:牛客网 月月给华华出题 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K, ...

  2. 牛客小白月赛12:月月给华华出题(欧拉函数)

    月月给华华出题 思路 ∑i=1nigcd(i,n)\sum_{i = 1} ^{n} \frac{i}{gcd(i, n)}i=1∑n​gcd(i,n)i​ =∑d∣n∑i=1nid(gcd(i,d) ...

  3. 牛客小白月赛28 J.树上行走

    牛客小白月赛28 J.树上行走 题目链接 题目描述 牛牛苦练武功绝学--轻功水上漂,最终没有练成,但是他学会了在树上行走的本领. 这天,牛牛落入了敌人的陷阱,身后有巨石追击,面前有n个点,n-1条边连 ...

  4. 牛客小白月赛24 J.建设道路

    牛客小白月赛24 J.建设道路 题目链接 题目描述 牛牛国有 nnn 个城市,编号为 1-n,第 iii 个城市有一个价值 aia_iai​ ,牛国的国王牛阔落特别喜欢在牛牛国旅游,并且他不想每次旅游 ...

  5. 牛客小白月赛21 J.Jelly

    牛客小白月赛21 J.Jelly 题目描述 Nancy喜欢吃果冻! Nancy钻进了一个n×n的果冻里,她想从(1,1,1)一路上.下.左.右.前.后六个方向吃到(n,n,n). 但果冻毕竟是有许多口 ...

  6. 牛客小白月赛6 J.洋灰三角

    牛客小白月赛6 J.洋灰三角 题目链接 题目描述 洋灰是一种建筑材料,常用来筑桥搭建高层建筑,又称,水泥.混凝土. WHZ有很多铸造成三角形的洋灰块,他想把这些洋灰三角按照一定的规律放到摆成一排的n个 ...

  7. 牛客小白月赛12 C 华华给月月出题 (积性函数,线性筛)

    链接:https://ac.nowcoder.com/acm/contest/392/C 来源:牛客网 华华给月月出题 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K, ...

  8. 牛客小白月赛12 H 华华和月月种树 (离线dfs序+线段树)

    链接:https://ac.nowcoder.com/acm/contest/392/H 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K,其他语言2621 ...

  9. 牛客小白月赛12 I 华华和月月逛公园 (tarjian 求桥)

    链接:https://ac.nowcoder.com/acm/contest/392/I 来源:牛客网 华华和月月逛公园 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K, ...

最新文章

  1. ios 支付宝支付集成
  2. 计算机中cmos设置程序,电脑主板上有CMOS设置是什么意思
  3. python学习(8)
  4. Eclipse之文件【默认编码格式设置】,防止乱码等问题
  5. EasyMock 简介
  6. TCP close_wait内幕
  7. 面具公园登陆不了未能找到服务器,面具公园之后,伴圈app成为了新的替代
  8. 万博java_构建高效的企业级Java应用系列(一)架构篇——1
  9. 如何实现Activiti的分支条件的自定义配置(转)
  10. 进出仓原理_通达信浪口主图+窥窃天机副图+进出仓副图强强组合
  11. ACM题目中输入数据的处理(C++语言版)
  12. 数字后端基本概念介绍<Tap Cell>
  13. 学业水平考试容易过吗_2019年12月贵州省普通高中学业水平考试真题汇总
  14. 如何做好手机APP测试?APP测试流程及解决方案
  15. 腾讯地图如何根据经纬度获取地址
  16. python说句心里话a_python第一周作业
  17. [数据库笔记] SQL50题11 - 30
  18. QT做的小游戏,技术成长ing(莫名押韵_dog)
  19. Android网络编程(八) 之 HttpURLConnection原理分析
  20. Transformers from Scratch(从零开始的Transformers )翻译学习【更新中】

热门文章

  1. SAP CRM呼叫中心toolbar的cancel按钮会导致session清理
  2. Jerry的ABAP, Java和JavaScript乱炖
  3. li 字多出了省略号_文字溢出自动显示省略号css方法 -
  4. volecity引入html,HTML5 Velocity.js 从页面下方跳入页面的登录框
  5. python duplicated函数_Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)...
  6. miui12怎么自定义开机动画_MIUI12正式官宣,5天后发布!网友:发布是发布,12月才能更新?...
  7. MAVEN [ERROR] 不再支持源选项 5。请使用 7 或更高版本。
  8. 单词拆分Python解法
  9. UE4学习-创建基于C++的场景
  10. python学习-代码调试(通过print调试、通过pdb调试、通过编译器调试(断点调试))