首页 > 其他分享 >CodeForces - 224D Two Strings

CodeForces - 224D Two Strings

时间:2023-02-04 11:07:20浏览次数:48  
标签:cout 224D CodeForces vis int left include Strings string


Description:

A subsequence of length |x| of string s = s1s2... s|s| (where |s| is the length of string s) is a string x = sk1sk2... sk|x| (1 ≤ k1 < k2 < ... < k|x| ≤ |s|).

You've got two strings — s and t. Let's consider all subsequences of string s, coinciding with string t. Is it true that each character of string s occurs in at least one of these subsequences? In other words, is it true that for all i(1 ≤ i ≤ |s|), there is such subsequence x = sk1sk2... sk|x| of string s, that x = tand for some j (1 ≤ j ≤ |x|) kj = i.

Input

The first line contains string s, the second line contains string t. Each line consists only of lowercase English letters. The given strings are non-empty, the length of each string does not exceed 2·105.

Output

Print "Yes" (without the quotes), if each character of the string s occurs in at least one of the described subsequences, or "No" (without the quotes) otherwise.

Examples

Input


abab ab


Output


Yes


Input


abacaba aba


Output


No


Input


abc ba


Output


No


Note

In the first sample string t can occur in the string s as a subsequence in three ways: abab, abab and abab. In these occurrences each character of string s occurs at least once.

In the second sample the 4-th character of the string s doesn't occur in any occurrence of string t.

In the third sample there is no occurrence of string t in string s.

这道题的题意真的很难理解,昨天的理解一直是错的,今天想了好久才明白,原来是判断S串是否可以由T串构成,意思就是在S串中找到一个包含所有字母的子序列,判断这个子序列是否等于T串,T串忍忍拆,按照顺序覆盖B串,是否可以完全覆盖,一定是按照顺序。先从左往右循环一遍记录S串中字母在T串中出现的位置,再从右往左循环一遍,记录S串中字母在T串中出现的位置,最后判断。

感谢LSD学长的耐心讲解。

AC代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stdlib.h>
#include <queue>
#include <vector>
#include<map>
const int INF = 0x3f3f3f3f;
using namespace std;
typedef long long ll;
typedef double ld;
#define mn 1000010
int i,j,k;
int n,m;
int c,d;
int cnt;
using namespace std;
int main()
{
string a,b;
int left[200005],right[200005];
memset(left,-1,sizeof(left));
memset(right,-1,sizeof(right));
int vis[27];
memset(vis,-1,sizeof(vis));
cin>>a>>b;
for(i=0,j=0;i<a.size();i++)
{
if(a[i]==b[j]&&j<=b.size())
{
left[i]=vis[a[i]-'a']=j;
j++;
}
else
left[i]=vis[a[i]-'a'];
}
/*for(i=0;i<a.size();i++)
cout<<left[i]<<" ";
cout<<endl;*/
/*for(char c='a';c<='z';c++)
cout<<vis[c-'a']<<" ";
cout<<endl;*/
memset(vis,-1,sizeof(vis));
for(i=a.size()-1,j=b.size()-1;i>=0;i--)
{
if(a[i]==b[j]&&j>=0)
{
right[i]=vis[a[i]-'a']=j;
j--;
}
else
right[i]=vis[a[i]-'a'];
}
/*for(i=0;i<a.size();i++)
cout<<right[i]<<" ";
cout<<endl;*/
bool flag=1;
for(i=0;i<a.size();i++)
{
//cout<<left[i]<<" "<<right[i]<<endl;
if(right[i]==-1||left[i]==-1||left[i]<right[i])
{
flag=0;
cout<<"No"<<endl;
break;
}
}
if(flag==1)
cout<<"Yes"<<endl;
return 0;
}

 

 

 

标签:cout,224D,CodeForces,vis,int,left,include,Strings,string
From: https://blog.51cto.com/u_15952369/6036913

相关文章

  • codeforces 1047C. Enlarge GCD(数学)
    题意:给出n个数,求出最少删除几个数可以扩大最大公因子。AC代码:#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<set>#include<map>#includ......
  • CodeForces 948A
    DescriptionBobisafarmer.Hehasalargepasturewithmanysheep.Recently,hehaslostsomeofthemduetowolfattacks.Hethusdecidedtoplacesomeshephe......
  • Codeforces 1322 B. Count Subrectangles(贪心)
    题意:给出序列和序列矩阵是由和决定的问你可以从中截取多少个面积为显然可知的一个性质那就是当序列连续长度为,序列连续长度为,时这个部分序列形成的......
  • Codeforces 1322 A. Unusual Competitions
    题意:给出一个含有的字符串,让你可以选择一个区间进行重新排序,问一共选择的区间长度是多少可以使得字符串最后变成我们只需要从头开始遍历然后找到这种字符,并且使得和......
  • Codeforces 1316 B. String Modification
    题意:反转一个字符串,反转规则为从字符串首字母开头,长度为,反转问一个$k$时会得到一个新串,求字典序最小的新串和,如果字典序相同,则输出最小的。比赛时被卡,疯狂,其实举......
  • Codeforces 1316 D. Nash Matrix(dfs)
    题意:给出一个的棋盘和每个棋盘位置最后能走到的位置,如果一直走不停下来就是,可以停下来就是走到的最后位置,让你输出每个位置的操作字符,上下左右和,停在此位置。我们先找......
  • Codeforces1260 E Tournament(贪心)
    Description:Youareorganizingaboxingtournament,wherenboxerswillparticipate(ispowerof),andyourfriendisoneofthem.Allboxershavedifferents......
  • Codeforces 1155D Beautiful Array
    给你n个数字的数组然后还有一个x,你可以选择一段区间乘上x,输出最大子段和。用一个二维dp来做就行了AC代码:#include<cstdio>#include<cstring>#include<iostream>#include<......
  • codeforces 1257E The Contest(lis)
    题意:3堆数,要求使得第一堆的数为前缀,第三堆数为后缀,第二堆数为剩下的数,要求最少调整多少个数的位置使得要求成立。其实就是就把a1,a2,a3排个序然后拼成一个数组,问题转为一个......
  • codeforces 1257C Dominated Subarray
    题意就是找到一个最小的子区间使得这个区间中只有一个数的个数为2.AC代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#inclu......