codeforces C - awoo's Favorite Problem

题目给定了两个变换

 

 手模一下发现变换的实质是:

对于aaaa...aaab,可以通过第一种变换到任何位置

对于bbbb...bbbc,同理

(很多题目,给出某个operation然后什么什么的,一般要去找找这些operation的性质

那么如果我们想把当前字母变成a,显然无解

如果想要的是b,只需要判断前方是否有aaaab即可

同理c,实现看代码~

 

复制代码
#include<bits/stdc++.h>
using namespace std;
void solve(){
    int n;
    cin>>n;
    string a,b;
    cin>>a>>b;
    for(int i=0;i<n;i++)
    {
        if(a[i]!=b[i])
        {
          if(b[i]=='a') 
          {
             cout<<"NO"<<endl;return;
            }
            else {
                   if(b[i]=='c')//need c
                    {
                       //bbbbc
                   int k1=i;
                   while(a[k1]=='b') k1++;
                   if(k1==i) {cout<<"NO"<<endl;return;}
        
                   if(a[k1]!='c'||k1>=n) {cout<<"NO"<<endl;return;}
                   swap(a[i],a[k1]);
                }
               else if(b[i]=='b')
                {
                   int k1=i;
                   while(a[k1]=='a') k1++;
                   if(k1==i) {cout<<"NO"<<endl;return;}
        
                   if(a[k1]!='b'||k1>=n) {cout<<"NO"<<endl;return;}
                   swap(a[i],a[k1]);
                }
            }
        }
    }
    cout<<"YES"<<endl;
    return;
}
int main(){
    //freopen("lys.in","r",stdin);
    int t;
    cin>>t;
    while(t--){
        solve();
    }
}
复制代码

 

posted @   liyishui  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示