比赛 2025.1.14 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 编辑字符串 最终得分 100
用户昵称 djyqjy 运行时间 0.345 s
代码语言 C++ 内存使用 4.21 MiB
提交时间 2025-01-14 19:54:56
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
    char c=getchar();
    int num=0,f=1;
    while(c<'0'||c>'9')
    {
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9') num=num*10+c-'0',c=getchar();
    return num*f;
}
const int N=100010;
int t,n;
char s1[N],s2[N],t1[N],t2[N];
int jsq1,jsq2,bel1[N],bel2[N];
pair<int,int> p1[N],p2[N];
int z,o;
int ans;
int main()
{
    freopen("edit.in","r",stdin);
    freopen("edit.out","w",stdout);
    t=read();
    while(t--)
    {
        n=read();
        scanf("%s%s%s%s",s1,s2,t1,t2);
        z=o=jsq1=jsq2=0;
        for(int i=0;i<n;i++)
        {
            if(i&&(t1[i]!=t1[i-1]||t1[i]=='0'))
            {
                jsq1++;
                for(int j=1;j<=z+o;j++) bel1[i-j]=jsq1;
                p1[jsq1]=make_pair(z,o),z=o=0;
            }
            if(s1[i]=='1') o++;
            else z++;
        }
        jsq1++,p1[jsq1]=make_pair(z,o);
        for(int j=1;j<=z+o;j++) bel1[n-j]=jsq1;
        z=o=0;
        for(int i=0;i<n;i++)
        {
            if(i&&(t2[i]!=t2[i-1]||t2[i]=='0'))
            {
                jsq2++;
                for(int j=1;j<=z+o;j++) bel2[i-j]=jsq2;
                p2[jsq2]=make_pair(z,o),z=o=0;
            }
            if(s2[i]=='1') o++;
            else z++;
        }
        jsq2++,p2[jsq2]=make_pair(z,o);
        for(int j=1;j<=z+o;j++) bel2[n-j]=jsq2;
        for(int i=0;i<n;i++)
        {
            if(p1[bel1[i]].first&&p2[bel2[i]].first) ans++,p1[bel1[i]].first--,p2[bel2[i]].first--;
            else if(p1[bel1[i]].second&&p2[bel2[i]].second) ans++,p1[bel1[i]].second--,p2[bel2[i]].second--;
            else if(p1[bel1[i]].first&&p2[bel2[i]].second) p1[bel1[i]].first--,p2[bel2[i]].second--;
            else p1[bel1[i]].second--,p2[bel2[i]].first--;
        }
        printf("%d\n",ans);
        ans=0;
    }
    return 0;
}