我打了个特殊性质 B,他把 C 的一半分也给我了(
#include<bits/stdc++.h>
using namespace std;
int T,n;
string s,s2,t,t2;
signed main(){
cin>>T;
while(T--){
cin>>n>>s>>s2>>t>>t2;int f=1,ans=0;
if(n<=10){
for(int i=1;i<=1e5;++i){
int u=rand()%n,v=rand()%2,d=rand()%2;
if(d){
if(v&&u>0&&t[u-1]=='1'&&t[u]=='1')swap(s[u],s[u-1]);
if(!v&&u<n-1&&t[u+1]=='1'&&t[u]=='1')swap(s[u],s[u+1]);
}
else{
if(v&&u>0&&t2[u-1]=='1'&&t2[u]=='1')swap(s2[u],s2[u-1]);
if(!v&&u<n-1&&t2[u+1]=='1'&&t2[u]=='1')swap(s2[u],s2[u+1]);
}
int cnt=0;
for(int j=0;j<n;++j)cnt+=(s[j]==s2[j]);
ans=max(ans,cnt);
}
cout<<ans<<'\n';continue;
}
for(int i=0;i<n;++i){
if(s[i]!=s[0])f=0;
if(s[i]==s2[i])++ans;
}
if(f)cout<<ans<<'\n';
else{
ans=0;int scnt0=0,scnt1=0,s2cnt0=0,s2cnt1=0;
for(int i=0;i<n;++i){
if(t[i]=='0'||t2[i]=='0')ans+=min(scnt0,s2cnt0)+min(scnt1,s2cnt1)+(s[i]==s2[i]),scnt0=s2cnt0=scnt1=s2cnt1=0;
else{
if(s[i]=='0')++scnt0;
else ++scnt1;
if(s2[i]=='0')++s2cnt0;
else ++s2cnt1;
}
}
ans+=min(scnt0,s2cnt0)+min(scnt1,s2cnt1);
cout<<ans<<'\n';
}
}
return 0;
}