题目链接

题目分析

题目很短,只有两句话,可分析的不多,似乎难以入手,我们不妨换一个思路转化一下题意,改为:是否对于 \(s\) 中的每一个字符,总有一个等于 \(t\) 的 \(s\) 的子序列覆盖它。

因此,我们可以考虑对于每一个字符,通过前后拼接的方式覆盖它,但是前后满足条件的子序列有很多,我们必须缩小范围。

考虑一下子序列的性质可以发现,总有一个等于 \(t\) 的子序列(如果 \(s\) 中有等于 \(t\) 的子序列),它的每一个元素在 \(s\) 中的下标都不晚于其他子序列的下标,这个结论很好证明,如果有一个不符合的那他肯定就不是这个最早的子序列。

知道了这个性质,来考虑前后拼接,我们对于 \(s\) 的每一个字符 \(s_i\),求出当 \(s\) 的子序列 \(u\) 以 \(s_i\) 为结尾时,它最长能匹配到的 \(t\) 的位置,前后都求一遍,记为 \(j\) 和 \(k\),因为具有前面提到的子序列的性质,这个位置一定是在 \(t\) 中最后面或者最前面的,所以如果 \(j<k\) 或者两个里有任意一个无法匹配,就无解,否则有解。

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#define ll long long
using namespace std;
int pos[30];
int l[1000001],r[1000001];
int main(){
string s,t;
cin>>s>>t;
int cnt=0,n=s.length(),m=t.length();
memset(r,0x3f,sizeof(r));
for(int i=0;i<n;i++){
if(cnt!=m && s[i]==t[cnt]){
l[i]=cnt+1;
pos[s[i]-'a'+1]=cnt+1;
cnt++;
}
else l[i]=pos[s[i]-'a'+1];
}
memset(pos,0,sizeof(pos));
cnt=m-1;
for(int i=n-1;i>=0;i--){
if(cnt!=-1 && s[i]==t[cnt]){
r[i]=cnt+1;
pos[s[i]-'a'+1]=cnt+1;
cnt--;
}
else r[i]=pos[s[i]-'a'+1];
}
for(int i=0;i<n;i++){
if(l[i]<r[i] || (l[i]==0 || r[i]==0)){
cout<<"No";
return 0;
}
}
cout<<"Yes";
return 0;
}

CF223B Two Strings 题解的更多相关文章

  1. CF1320 Div1 D.Reachable Strings 题解

    题目大意 给定一个长为\(n\)的01串\(S\),每次你可以对一个串的三个连续位置做:\(011 \rightarrow 110\),\(110 \rightarrow 011\)的操作. 有\(q ...

  2. CF1144A Diverse Strings 题解

    Content 我们定义一个字符串是合法的,当且仅当这个字符串是"连续排列"(按照字母表顺序排序).现在给出 \(n\) 个字符串 \(s_1,s_2,s_3,...,s_n\), ...

  3. POJ2406:Power Strings——题解

    http://poj.org/problem?id=2406 就是给一个串,求其循环节的个数. 稍微想一下就知道,KMP中nxt数组记录了所有可与前面匹配的位置. 那么如果我们的循环节长度为k,有n个 ...

  4. 洛谷 UVA10298 Power Strings 题解

    Analysis 结论:设字符串长度为n,最长相同前后缀的长度为kmp[i],如n%(n-kmp[n])=0,则答案为n/(n-kmp[n]),否则为1. 如果循环节多于一个,以前n-kmp[n]个为 ...

  5. POJ2406 Power Strings 题解 KMP算法

    题目链接:http://poj.org/problem?id=2406 题目大意:给你一个字符串 \(t\) ,\(t\) 可以表示为另一个小字符串循环了 \(K\) 了,求最大的循环次数 \(K\) ...

  6. CF544A Set of Strings 题解

    Content 有一个长为 \(n\) 的字符串 \(q\),试问能否将其划分为 \(k\) 个子串,使得每个子串的首字母都不相等,可以的话输出 \(\texttt{YES}\) 并输出任意一个方案, ...

  7. CF447B DZY Loves Strings 题解

    Content 有一个长度为 \(n\) 的仅含小写字母的字符串 \(s\) 以及 26 个英文小写字母的价值 \(W_\texttt{a},W_\texttt{b},...,W_\texttt{z} ...

  8. CF1547B Alphabetical Strings 题解

    Content 我们有一个空的字符串,第 \(i\) 次操作我们可以将字母表中第 \(i\) 个字母加入字符串的最前面或最后面.我们称一个长度为 \(n\) 的字符串是合法的,当且仅当这个字符串可以通 ...

  9. CF1506C Double-ended Strings 题解

    Content 有两个字符串 \(a,b\).我们每次操作可以将两个字符串中的一个字符串的最前面一个字符或这最后面一个字符删去(可以将某个字符串通过若干次操作变为空串).求需要多少次操作才能够使 \( ...

  10. [USACO12NOV]同时平衡线Concurrently Balanced Strings DP map 思维

    题面 [USACO12NOV]同时平衡线Concurrently Balanced Strings 题解 考虑DP. \(f[i]\)表示以\(i\)为左端点的合法区间个数.令\(pos[i]\)表示 ...

随机推荐

  1. 【Shell】ps 命令

    ps 命令 Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器. 1. ps 常用的命令 ps -aux #显示所有进程信息 ...

  2. ZIM|一站式接入,打通 RTC 和 IM 组合拳

    从用户信息.用户心跳到用户间私人与聊天室通信,IM 一直是互联网世界中不可或缺的基础建设之一.早在连麦和直播诞生之前,IM 就已是在通讯领域内服役多年的老兵,而随着线上音视频的兴起,IM 不仅没有没落 ...

  3. React:styled-components有趣的用法

    背景 用于记录一些styled-components的有趣的用法 绑定a标签的链接 编写伪类 在styleComponents中使用参数 传入参数

  4. ABC274 题解

    A 题目:给定 \(A,B\) 输出 \({B}\over{A}\) 保留 \(3\) 位小数. 简答题,和A+B problem 一样,除一除,保留一下小数. B 题目:给定一个 \(n\) 行 \ ...

  5. Cesium Billboard加载Gif图片

    https://blog.csdn.net/xietao20/article/details/109404491

  6. noip2022保龄记

    第一次参加noip,写第一篇游记纪念一下 天还挺热,今天就穿了个秋衣加卫衣,本来还打算穿袄子来着,但是爸妈没让 到了八中才发现好像没带水,然后我的老父亲跑到不知道哪里去给买了一瓶(八中门口看不到有小卖 ...

  7. 行行AI人才直播第15期:【AIGC科技公司法律顾问】Amber《AIGC的法律挑战》

    近年来,AIGC技术的迅速进步为社会经济发展带来了新的机遇.各行各业都开始关注AIGC相关技术在商业落地中的应用,AIGC相关的创业及项目如雨后春笋般涌现.然而,AIGC的广泛应用也带来了一系列的法律 ...

  8. 更专业省心的来了,你没必要研究UE4和Unity官方推流了!

    在当今互联网时代,所有的内容制作者都希望尽可能触达到更多的目标受众,那就需要全平台发布内容并且可以轻松跨平台分享,包括手机.平板电脑.个人电脑以及交互式屏幕,用户能畅快的获得高质量的体验.需求催生了一 ...

  9. U268603 I Hate This Tree 题解

    传送门 一道纯粹的码力 + 卡常题. 前置 矩阵乘法,线段树. 分析 线段树存矩阵. 构造迭代矩阵: \[\begin{pmatrix}f_i&f_{i-1}\end{pmatrix}\tim ...

  10. 《Kali渗透基础》13. 无线渗透(三)

    @ 目录 1:无线通信过程 1.1:Open 认证 1.2:PSK 认证 1.3:关联请求 2:加密 2.1:Open 无加密网络 2.2:WEP 加密系统 2.3:WPA 安全系统 2.3.1:WP ...