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(); } }

浙公网安备 33010602011771号