牛客小白赛12:J 地址:https://ac.nowcoder.com/acm/contest/392/J

2019南昌网络赛:M 地址:https://nanti.jisuanke.com/t/38232

牛客练习赛23:D 地址:https://ac.nowcoder.com/acm/contest/156/D

题目:


给定一个字符串s,和n个字符串ss,查询每个ss是不是s的子序列

解题思路:


序列自动机,纯裸题,套模版。

序列自动机的nxt[][]数组, nxt[i][j]表示下标i后面第一个j+'a'出现的位置,倒序求这个数组,求法见代码

之所以称之为序列自动机大概就是因为通过这个方法可以求出原串的所有子序列吧。

时间复杂度:n为s的长度,获得nxt数组O(26*n),查询O(), 所以总的时间复杂度 O(26*n+)

一定要判断ss[0]是否出现了,否则会出现段错误,[-1]

ac代码:


前两道题:

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) ((x)&(-x))
typedef long long ll;
const int maxn = 1000006;
string s, qs;
int n;
int nxt[maxn][30],pos[30];//nxt[i][j]表示i后面出现的第一个j+'a'的下标,pos[i]记录i+'a'目前为止出现的最靠左的位置
void getNxt()
{int len = s.length();memset(pos, -1, sizeof(pos));for(int i = len - 1; i >= 0; i--)//倒序!!{for(int j = 0; j < 26; j++)nxt[i][j] = pos[j];pos[s[i] - 'a'] = i;//更新pos}
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);getline(cin, s);getNxt();cin >> n;while(n--){cin >> qs;if(pos[qs[0] - 'a'] == -1)printf("No\n");else{int now = pos[qs[0] - 'a'];//s[0]第一次出现的位置int len = qs.length(), i;for(i = 1; i < len; i++){now = nxt[now][qs[i] - 'a'];//前一个字符后面有没有下一个字符if(now == -1){printf("No\n");break;}}if(i == len) printf("Yes\n");}}return 0;
}

牛客练习23:D 仔细读题啊!!仔细看样例!!我一直以为某个排列出现多次的话就会产生多点伤害值!!其实都只产生1点,浪费了好长时间(;´༎ຶД༎ຶ`)

//abcdefghi 9
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 3005;
string s;
int nxt[maxn][10], pos[10], a[]={0,1,2,3,4,5,6,7,8};
ll ans = 0;
void getNxt()
{memset(pos, -1, sizeof(pos));int len = s.length();for(int i = len - 1; i >= 0; i--){for(int j = 0; j <= 8; j++)nxt[i][j] = pos[j];pos[s[i] - 'a'] = i;}
}
int main()
{ios::sync_with_stdio(false);cin >> s;getNxt();do{int now = pos[a[0]], i = 0 ;//a[0]最先出现的位置if(now == -1) continue;//如果排列的第一个字母没有出现过for(i = 1; i < 9;i++){now = nxt[now][a[i]];if(now == -1) break;}if(i == 9) ans++;//是s的子串}while(next_permutation(a,a+9));cout << ans << endl;;return 0;
}

【牛客小白赛12:J/2019南昌网络赛:M/牛客练习赛23:D】查询字符串ss是否是字符串s的子序列(序列自动机裸题)相关推荐

  1. 牛客小白月赛12 J 月月查华华的手机 (序列自动机模板题)

    链接:https://ac.nowcoder.com/acm/contest/392/J 来源:牛客网 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机.月月出于人类最单纯的好奇 ...

  2. 2019南昌网络赛 C题,Hello 2019

    题意:求包含9012,但是不包含8012的最小删除次数 解题思路:首先将字符串反转,按照题解思路为线段树维护矩阵即可 我们将线段树的每个区间用矩阵表示,矩阵mat[5][5]维护2019这个序列的情况 ...

  3. 2019 南昌网络赛D FFT多个多项式相乘

    2019 Asia Nanchang D. Interesting Series 链接:https://nanti.jisuanke.com/t/41351 题意:首先题目给了若干定义 定义:Fn=( ...

  4. 2019南昌网络赛G. tsy‘s number(反演 + 积性函数O(n)预处理)

    tsy's number 推式子 ∑i=1n∑j=1n∑k=1nϕ(i)ϕ(j2)ϕ(k3)ϕ(i)ϕ(j)ϕ(k)ϕ(gcd(i,j,k))我们假定j=p1k1p2k2p3p3--pnkn,有ϕ(j ...

  5. 2019南昌网络赛 H. The Nth Item(广义斐波那契数列求通项公式模板)(二次剩余+分块)

    链接:https://nanti.jisuanke.com/t/41355 题意: Q个询问,每次求F(N),但是N要用上一次询问的结果得到. 思路: 1.直接矩阵快速幂求,再用map记一下答案,求过 ...

  6. 2019南昌网络赛-I(单调栈+线段树)

    题目链接:https://nanti.jisuanke.com/t/38228 题意:定义一段区间的值为该区间的和×该区间的最小值,求给定数组的最大的区间值. 思路:比赛时还不会线段树,和队友在这题上 ...

  7. 2019南昌网络赛  I. Yukino With Subinterval 树状数组套线段树

    I. Yukino With Subinterval 题目链接: Problem Descripe Yukino has an array \(a_1, a_2 \cdots a_n\). As a ...

  8. 2019南昌网络赛 Yukino With Subinterval —— 树套树 或 cbq分治

    题目链接:点我啊╭(╯^╰)╮ 评测机好像换了,没有当初那么卡了... 最快写法: #include<bits/stdc++.h> #define rint register int #d ...

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

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

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

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

最新文章

  1. 红帽、Docker、SUSE 在俄罗斯停服
  2. 父类指针访问子类成员变量
  3. Oracle 表空间常用sql
  4. 收款码合并有什么弊端_为什么明明有个人收款码了,还要申请微信收款商业版?...
  5. 通过的镜像源安装python包
  6. 干了这杯可乐!Gulp 上手指南
  7. CentOS - 安装mysql
  8. 高德地图自定义主题地图,盖住中国红色边境线
  9. 小程序项目:基于微信小程序的每日签到打卡——计算机毕业设计
  10. OSChina 周二乱弹 ——深入浅出微信小程序
  11. 在线qq客服的html代码生成器,js生成qq客服在线代码
  12. 使用md5进行密码的加密和验证
  13. QQ被盗恢复原来QQ的好友有妙招
  14. 中国货币供应量全球第一的反思
  15. Cisco Packet Tracer思科模拟器交换机的VTP技术
  16. 数据挖掘--糖尿病遗传风险检测
  17. 哪些人工智能企业有内部人才培养项目?
  18. D3.js(v3版本)
  19. echarts 饼图 逆时针降序排序
  20. C# 如何显示动态图片

热门文章

  1. 高校教材:计算机网络技术与应用,《网络技术与应用》计算机网络-教材-高等学校.pdf...
  2. docker容器别人访问很卡_一篇文章带你走进Docker的世界
  3. python裁剪图片并保存_Python PIL:如何保存裁剪后的图像?
  4. java session 使用_浅谈Session的使用(原创)
  5. WPF-创建超链接文本
  6. mysql 分库分表 ~ ShardingSphere生态圈
  7. java多线程Lock接口简介使用与synchronized对比 多线程下篇(三)
  8. ASP.NET Core 基础教程总结 - ASP.NET Core 基础教程 - 简单教程,简单编程
  9. VMware虚拟机、centos以及securecrt的安装
  10. WPF Binding学习(三)