题解:CF2094D Tung Tung Sahur
jinhangdong · · 题解
如果他们的第一个音符不同,肯定不对。
然后统计出,这些串有几段,把每段音符个数计入下来。
如果段数不同不合法。
然后枚举每一段如果实际比弹得少不合法,如果如果实际比弹的两倍多也不合法。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int t,cnt,cntx,cnty,X[N],Y[N];
string s,p;
int main()
{
cin>>t;
while(t--)
{
cntx=cnty=0;
cin>>s>>p;
if(s[0]!=p[0])
{
cout<<"NO\n";
continue;
}
for(int i=0;i<=p.size();++i) X[i]=Y[i]=0;
cnt=1;
for(int i=1;i<s.size();++i)
{
if(s[i]!=s[i-1])
{
X[++cntx]=cnt;
cnt=1;
}
else cnt++;
}
X[++cntx]=cnt;
cnt=1;
for(int i=1;i<p.size();++i)
{
if(p[i]!=p[i-1])
{
Y[++cnty]=cnt;
cnt=1;
}
else cnt++;
}
Y[++cnty]=cnt;
if(cntx!=cnty)
{
cout<<"NO\n";
continue;
}
bool flag=1;
for(int i=1;i<=cntx;++i)
{
if(Y[i]<X[i])
{
flag=0;
cout<<"NO\n";
break;
}
if(Y[i]>X[i]*2)
{
flag=0;
cout<<"NO\n";
break;
}
}
if(flag) cout<<"YES\n";
}
return 0;
}