题解 CF2094D
HYdroKomide · · 题解
题意
给定一个 0-1 串,可以选择其中一些位置的数字变成两个并且放回原处。问一个串
思路
考虑对于这两个串分连续段,每段由
那么对于在
模拟判断即可,注意边界的特殊处理。
思考题:假设所有位数字都有
程序如下
#include<iostream>
#include<cstring>
using namespace std;
const int N=2e5+5;
int T,n;
int main(){
ios::sync_with_stdio(false);
cin>>T;
while(T--){
string p,s;
cin>>p>>s;
int curs=0;
bool flag=true;
for(int i=0;i<p.size();i++){
int stp=i,sts=curs;
if(s[curs]!=p[i]){
flag=false;
break;
}
while(i!=p.size()-1&&p[i]==p[i+1])i++;
int lenp=i-stp+1;
while(curs!=s.size()-1&&s[curs]==s[curs+1])curs++;
int lens=curs-sts+1;
if(lenp>lens||(lenp<<1)<lens){
flag=false;
break;
}
curs++;
}
if(curs!=s.size())flag=false;
if(flag)cout<<"YES\n";
else cout<<"NO\n";
}
return 0;
}