题解:CF2094D Tung Tung Sahur
metrixgo_caozhendi · · 题解
一道字符串遍历的问题。先看范围是 LLL
时,L
。我们称这两段字符串为对应字符串。你会发现对于
察觉到以上规律以后,我们可以定义两个指针,两个指针从左往右扫到一段重复字符的末尾,然后进行长度比较。如果不符合上述限制,就输出 NO
。当整个字符串遍历完以后都没出现问题,就是 YES
。
代码如下(其实有些地方可以优化一下,但是影响不大):
#include<bits/stdc++.h>
using namespace std;
const int N=805;
int t,n,m,k,l,r,flg;
int a[N][N],book[2*N];
string s,p;
queue<int> q;
int main()
{
cin>>t;
while(t--)
{
cin>>p>>s;
n=p.size(),m=s.size();
p='0'+p,s='0'+s,l=1,r=1,flg=0;
int lcnt=0,rcnt=0;
while(l<=n&&r<=m)
{
while(l<=n&&p[l]=='L') l++,lcnt++;
while(r<=m&&s[r]=='L') r++,rcnt++;
if(!(lcnt<=rcnt&&rcnt<=lcnt*2)) break;
lcnt=0,rcnt=0;
while(l<=n&&p[l]=='R') l++,lcnt++;
while(r<=m&&s[r]=='R') r++,rcnt++;
if(!(lcnt<=rcnt&&rcnt<=lcnt*2)) break;
lcnt=0,rcnt=0;
if(l>n&&r>m) flg=1;
}
if(flg) cout<<"YES\n";
else cout<<"NO\n";
}
return 0;
}