比赛 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;
}