CF2092B Lady Bug
题目描述
当 Dasha Purova 刚越过法国边境时,反派 Markaron 绑架了她并将她关押在其城堡下的监狱中。幸运的是,神奇的 Lady Bug 得知 Dasha 的消息后立即赶往 Markaron 的城堡营救她。然而,她需要破解一个复杂密码才能进入。
该密码由两个长度为 \(n\) 的比特字符串 \(a\) 和 \(b\) 组成。Lady Bug 在一次操作中可以选择任意索引 \(2 \leq i \leq n\) 并执行以下两种操作之一:
- 交换 \((a_i\), \(b_{i-1})\)。
- 交换 \((b_i\), \(a_{i-1})\)。
Lady Bug 可以进行任意次数的操作。若她能使第一个字符串 \(a\) 仅由 \(0\) 组成,则视为密码破解成功。请帮助她判断是否能成功营救 Dasha。
Solution
将这两个操作翻译一下就是可以走蛇形路径上的数随意交换。即 \(a\) 第一个和 \(b\) 第二个和 \(a\) 第三个等等可以随便交换。\(b\) 第一个和 \(a\) 第二个和 \(b\) 第三个等等可以随便交换。容易知道我们可以将其中一条路径上的所有 \(0\) 交换到 \(a\) 数组上面。那么我们只需要统计每一条路径上 \(0\) 的个数能否覆盖所需地方即可。
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
int t,n;
string a,b;
int main(){
cin>>t;
while(t--){
cin>>n>>a>>b;
a=" "+a,b=" "+b;
int cnt=0,k=0;
for(int i=1;i<=n;++i){
if(i%2==0){
cnt+=(b[i]=='0');
}else{
cnt+=(a[i]=='0');
++k;
}
}
if(cnt<k){
puts("NO");
}else{
cnt=0,k=0;
for(int i=1;i<=n;++i){
if(i%2==0){
cnt+=(a[i]=='0');
++k;
}else{
cnt+=(b[i]=='0');
}
}
if(cnt<k){
puts("NO");
}else{
puts("YES");
}
}
}
return 0;
}
浙公网安备 33010602011771号