比赛 |
2025.1.14 |
评测结果 |
EEEEEEEEEEEEEEEEEEEE |
题目名称 |
编辑字符串 |
最终得分 |
0 |
用户昵称 |
李奇文 |
运行时间 |
4.339 s |
代码语言 |
C++ |
内存使用 |
4.02 MiB |
提交时间 |
2025-01-14 20:35:43 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int T,n,a[100005][2],b[100005][2];
string s,d,f,g;
int solve(){
std::cin>>n;
int ans=0,k=0;
std::cin>>s>>d>>f>>g;
for(int i=0;i<n;i++) a[i][1]=a[i][0]=b[i][0]=b[i][1]=0;
for(int i=0;i<n;i++){
if(f[i]=='0') continue;
if(i>0&&f[i-1]=='0') k=i;
a[k][s[i]-'0']++;
}
k=0;
for(int i=0;i<n;i++){
if(g[i]=='0') continue;
if(i>0&&g[i-1]=='0') k=i;
b[k][d[i]-'0']++;
}
k=0;
int x[2]={0,0},y[2]={0,0};
for(int i=0;i<n;i++){
int j=0;
x[0]+=a[i][0],x[1]+=a[i][1];
y[0]+=b[i][0],y[1]+=b[i][1];
if(f[i]=='0'&&g[i]=='0'){
ans+=(s[i]==d[i]);
}else if(f[i]=='0'){
j=s[i]-'0';
if(y[j]>0){
ans++;
y[j]--;
}else{
y[1-j]--;
}
}else if(g[i]=='0'){
j=d[i]-'0';
if(x[j]>0){
ans++;
x[j]--;
}else{
x[1-j]--;
}
}else{
if(x[0]>0&&y[0]>0){
x[0]--;
y[0]--;
ans++;
}else if(x[1]>0&&y[1]>0){
x[1]--;
y[1]--;
ans++;
}else{
if(x[0]>0)x[0]--;
if(x[1]>0)x[1]--;
if(y[0]>0)y[0]--;
if(y[1]>0)y[1]--;
}
}
}
std::cout<<ans<<endl;
}
int main(){
freopen("edit.in","r",stdin);
freopen("edit.out","w",stdout);
std::cin>>T;
while(T--){
solve();
}
return 0;
}