题面和链接放文末
/*
流程:
是一道寻找a串中是否存在b串中的所有元素的进阶题,在此之上做出了“只能消除相邻字符“的限制
因为魔法学姐可以消除前缀,因此不用考虑前面的情况,从后往前在a串里找到b的每个元素即是yes,否则为no
*/
不要写多余的条件,推出了什么条件就写什么
写完这道题后突然感觉明白了为什么把思维和模拟放一块分类了:
思维题其实就是把流程隐藏起来,不易想到的模拟题,想到了流程之后就可以直接模拟求解
#include <iostream>
using namespace std;
int main(){
int t;
cin >> t;
while(t--){
string a,b;
cin>> a >> b;
int lena = a.size(),lenb = b.size();
bool flag = false;
for(int i = lena - 1,j = lenb - 1;j >= 0;i--,j--){//'&&'写成','后莫名re
while(a[i] != b[j] && i >= 0) i-= 2;
if(i < 0) {
flag = true;
break;
}
}
if(flag){
cout << "NO" << endl;
}
else cout << "YES" << endl;
}
return 0;
}
描述
今天是星期五,朱学姐像往常一样去工作室,但是今天他出门的时候是左脚踏出的寝室,所以她今天的运气不太好.
刚走到一般的路程,小卷毛就突然骑着小电驴从旁边飞驰而过,然后一个漂移跳下了车说:来不及解释了! 然后就丢给朱学姐两个神奇的字符串a和b
正当朱学姐摸不着头脑时,小卷毛已经直接弹射起步得飞向工作室,然后董学姐从后面追过来,看到了朱学姐手中的两个字符串,她十分的惊讶,说:这是上古时代遗留下来的字符串,如果在规定时间内成功的将a转化为b,那么你将获得一枚通向新大陆的通行证。我来的匆忙,只能先用我仅剩的法力值帮你让a的前缀消失,或者我也可以不操作“,然后董学姐走了之后,朱学姐发现他可以用当前法力值让处理后的字符串去掉任意数量的两个相邻的字符,并且这些操作是同时进行的。
现在好奇又聪明的你想要知道朱学姐可不可能拿到通行证(已知朱学姐聪明绝顶)。
输入描述
第一行输出一个t(1<=t<=10000)表示有t组测试样例
每一组都有两行,第一行是字符串a,第二行是字符串b
(a和b的长度均不超过105)
保证在所有测试案例中,字符串的总字符数不超过2⋅105。
输出描述
对于每组数据a能转化为b就输出“”YES"否者就输出“NO”,每组输出用空格隔开。
用例输入 1
4 ababa ba ababa bb aaa aaaa aababa ababa
用例输出 1
YES NO NO YES
提示
对于样例1来说,我们只需要先让董学姐删除前缀aba
然后剩下的字符串不进行操作。既可以转化为b,或者是删除前缀a,然后第一个字符串就变为baba,我们在选择下标为1,2的字符删去,就可以转化为第二个字符串。
对于第4组数据,我们可以删除下标为1前缀,剩余的就是第二个字符串。