题目地址: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(思维+构造)相关推荐

  1. ICPC 2019 徐州网络赛

    ICPC 2019 徐州网络赛 比赛时间:2019.9.7 比赛链接:The Preliminary Contest for ICPC Asia Xuzhou 2019 赛后的经验总结 // 比赛完才 ...

  2. 2019徐州网络赛G

    2019徐州网络赛G 题意 给定s字符串,定义一个回文串的价值是这个回文串中不同字母的个数,求s中所有回文串的价值之和. 思路 马拉车加序列自动机. 代码 #include<bits/stdc+ ...

  3. 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 ...

  4. [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 ...

  5. 【2019.09.07】2019徐州网络赛

    补题地址:https://www.jisuanke.com/contest/3005?view=challenges 题目: A:✅ B:✅ C:✅ D:✅ E:✅ F: G:✅ 回文树+二进制统计回 ...

  6. 2019徐州网络赛 K.Center (STL)

    题意: 给n个点的坐标,求至少再加入几个点能使得所有点中心对称 分析: 中心对称的中心点肯定是给定的某一个点,或者某条连线上的中点 如果将一个点作为中心点,可以消去一个点 如果将连线中点作为中心点,可 ...

  7. 2019徐州网络赛 G Colorful String 马拉车+后缀

    题目链接:https://nanti.jisuanke.com/t/41389 题解:马拉车处理回文串,每个位置记录后面每个字符出现的第一个位置,然后把每种字符额贡献加起来即可 #include< ...

  8. 2019 ICPC 徐州网络赛 J.Random Access Iterator

    2019 ICPC 徐州网络赛 J.Random Access Iterator 题目大意:给你n个点和n-1条边(树形结构),保证1为根节点,通过以下方式dfs遍历: 询问dfs到最深节点的概率(有 ...

  9. 【计蒜客 - 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 ...

  10. 2018 ICPC 徐州网络赛 D. Easy Math(思维,反演,杜教筛)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://nanti.jisuanke.com/t/A2003 Problem 计算 ...

最新文章

  1. 10-TypeScript中的接口
  2. slf4j 日志接口 统一
  3. qr分解求线性方程组_梯度下降求解线性方程组算例设计
  4. cmd对应linux sleep命令,linux的sleep命令
  5. python 中的 __name__
  6. 如何在报表的Header和Footer中使用DataSet中的Field
  7. 合并多个 SQL 文件,并用 Navicat 执行
  8. linux 以某个用户执行,Linux下以其他用户运行程序
  9. Web页面执行shell命令
  10. 七夕动态表白代码,基于python
  11. 与孩子一起学编程07章
  12. iOS及Mac开源项目和学习资料【超级全面】
  13. python为什么会出现无响应怎么办,Python多处理中无响应进程的终止
  14. Navicat Premium15 注册出现No all pattern found! file already patched?
  15. Win10、Win11打开远程桌面连接方法
  16. 2021 AI年度报告-stateof.ai出品【1】
  17. 01-查看Navicat加密的数据库密码
  18. macd金叉kdj死叉的准确率_MACD金叉不涨又死叉
  19. 双硫脲改性Zr-MOF吸附材料|聚多巴胺(PDA)改性MOF-5|羧酸改性的UiO-66(Zr)膜|有机骨架材料的定制技术
  20. php抓取图片curl,php获取远程图片的两种 CURL方式和sockets方式获取远程图片

热门文章

  1. 蓝桥杯 前缀判断——2013年省赛C/C++A组真题5
  2. Ubuntu中vim编辑器的常用操作
  3. jsjavaScript打印99乘法表
  4. 三星emcp型号详解_eMCP终将成为过去式?解析:三星、美光所推出的uMCP为何物?...
  5. 小程序 params_08. 小程序项目实战:设置首页轮播图(3)
  6. python包管理工具pip_pip_python包管理工具(pip)下载 v9.0.1官方版 - 121下载站
  7. python入门教程基础语法_python入门教程13-02 (python语法入门之库相关操作)
  8. 实现对span标签的多选单选功能_如何在Notion中做多级标签?-Notion102
  9. Java开发面试题汇总 -- 精选版(附答案)
  10. 利用iptables实现SNAT及DNAT