【2019徐州网络赛:M】Longest subsequence(思维+构造)
题目地址:https://nanti.jisuanke.com/t/41395
题目:
给出长度为n的字符串s,长度为m的字符串t,在s中找出最长的子序列q,使得q的字典序比t大,如果不存在这样一个子序列q,输出-1,否则输出q的长度
解题思路:
对于t串中的t[i]:
(1)若在s串中能够找到一个大于t[i]的字符s[j],那么s串中s[j]之后(包括s[j])的字符都可取,且j一定是在 s中和t[i-1]相同的字符 的后面,计算出这个子序列对应的长度,更新答案;
(2)若能在s串中找到一个和t[i]相等的s[j], 那么标记这个s[j]的位置为last,继续向下查询。
(3)如果s串中没有和t[i]相等的,那么s串中的子序列对应位置上只能选一个比t[i]大的,不再向下处理。
如果能在s串中找到一个和t完全相同的子序列且s串中末尾还有剩余的字符,说明还存在一个满足条件的子序列,更新答案。
每次都应先考虑能否在s串中找到一个大于t[i]的,因为若s串中不存在和t[i]相等的字符时就结束处理了,但是此时s中可能还存在大于t[i]的字符,对应的子序列长度是要参与答案统计的。
两组特殊的测试样例:
(1)cba cba
(2)cbaa cba
ac代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
int n,m;
char s[maxn],t[maxn];
vector<int> pos[30];
int main()
{scanf("%d %d", &n, &m);scanf("%s", s);scanf("%s", t);for(int i = 0; i < n; i++)pos[s[i]-'a'].push_back(i);int last = -1, ans = -1;bool all = true;//在s串中存在一个子序列和t串相同for(int i = 0; i < m; i++){int p = t[i]-'a';for(int k = p+1; k < 26; k++)//比t[i]大的{auto it = upper_bound(pos[k].begin(), pos[k].end(), last);//在last之后第一个k+'a'的下标if(it != pos[k].end())ans = max(ans, n - *it + i);//能找到,it后面的字符全取}auto it = upper_bound(pos[p].begin(), pos[p].end(), last);if(it == pos[p].end())//没有找到=t[i]的,只能取大于t[i]的,后续不用处理了{all = false;break;}last = *it;}if(all && last != n-1)//s串中存在和t串相同的子序列,且s中还有剩余的字母ans = max(ans, m + n - last - 1);printf("%d\n", ans);return 0;
}
【2019徐州网络赛:M】Longest subsequence(思维+构造)相关推荐
- ICPC 2019 徐州网络赛
ICPC 2019 徐州网络赛 比赛时间:2019.9.7 比赛链接:The Preliminary Contest for ICPC Asia Xuzhou 2019 赛后的经验总结 // 比赛完才 ...
- 2019徐州网络赛G
2019徐州网络赛G 题意 给定s字符串,定义一个回文串的价值是这个回文串中不同字母的个数,求s中所有回文串的价值之和. 思路 马拉车加序列自动机. 代码 #include<bits/stdc+ ...
- The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 XKC's basketball team
XKC , the captain of the basketball team , is directing a train of nn team members. He makes all mem ...
- [The Preliminary Contest for ICPC Asia Xuzhou 2019 - 徐州网络赛E] XKC's basketball team
XKC's basketball team XKC , the captain of the basketball team , is directing a train of nn team mem ...
- 【2019.09.07】2019徐州网络赛
补题地址:https://www.jisuanke.com/contest/3005?view=challenges 题目: A:✅ B:✅ C:✅ D:✅ E:✅ F: G:✅ 回文树+二进制统计回 ...
- 2019徐州网络赛 K.Center (STL)
题意: 给n个点的坐标,求至少再加入几个点能使得所有点中心对称 分析: 中心对称的中心点肯定是给定的某一个点,或者某条连线上的中点 如果将一个点作为中心点,可以消去一个点 如果将连线中点作为中心点,可 ...
- 2019徐州网络赛 G Colorful String 马拉车+后缀
题目链接:https://nanti.jisuanke.com/t/41389 题解:马拉车处理回文串,每个位置记录后面每个字符出现的第一个位置,然后把每种字符额贡献加起来即可 #include< ...
- 2019 ICPC 徐州网络赛 J.Random Access Iterator
2019 ICPC 徐州网络赛 J.Random Access Iterator 题目大意:给你n个点和n-1条边(树形结构),保证1为根节点,通过以下方式dfs遍历: 询问dfs到最深节点的概率(有 ...
- 【计蒜客 - 2019南昌邀请赛网络赛 - M】Subsequence(字典树,dp预处理)
题干: Give a string SS and NN string T_iTi , determine whether T_iTi is a subsequence of SS. If ti i ...
- 2018 ICPC 徐州网络赛 D. Easy Math(思维,反演,杜教筛)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://nanti.jisuanke.com/t/A2003 Problem 计算 ...
最新文章
- 10-TypeScript中的接口
- slf4j 日志接口 统一
- qr分解求线性方程组_梯度下降求解线性方程组算例设计
- cmd对应linux sleep命令,linux的sleep命令
- python 中的 __name__
- 如何在报表的Header和Footer中使用DataSet中的Field
- 合并多个 SQL 文件,并用 Navicat 执行
- linux 以某个用户执行,Linux下以其他用户运行程序
- Web页面执行shell命令
- 七夕动态表白代码,基于python
- 与孩子一起学编程07章
- iOS及Mac开源项目和学习资料【超级全面】
- python为什么会出现无响应怎么办,Python多处理中无响应进程的终止
- Navicat Premium15 注册出现No all pattern found! file already patched?
- Win10、Win11打开远程桌面连接方法
- 2021 AI年度报告-stateof.ai出品【1】
- 01-查看Navicat加密的数据库密码
- macd金叉kdj死叉的准确率_MACD金叉不涨又死叉
- 双硫脲改性Zr-MOF吸附材料|聚多巴胺(PDA)改性MOF-5|羧酸改性的UiO-66(Zr)膜|有机骨架材料的定制技术
- php抓取图片curl,php获取远程图片的两种 CURL方式和sockets方式获取远程图片
热门文章
- 蓝桥杯 前缀判断——2013年省赛C/C++A组真题5
- Ubuntu中vim编辑器的常用操作
- jsjavaScript打印99乘法表
- 三星emcp型号详解_eMCP终将成为过去式?解析:三星、美光所推出的uMCP为何物?...
- 小程序 params_08. 小程序项目实战:设置首页轮播图(3)
- python包管理工具pip_pip_python包管理工具(pip)下载 v9.0.1官方版 - 121下载站
- python入门教程基础语法_python入门教程13-02 (python语法入门之库相关操作)
- 实现对span标签的多选单选功能_如何在Notion中做多级标签?-Notion102
- Java开发面试题汇总 -- 精选版(附答案)
- 利用iptables实现SNAT及DNAT