比赛 |
2025.1.14 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
编辑字符串 |
最终得分 |
100 |
用户昵称 |
123 |
运行时间 |
2.923 s |
代码语言 |
C++ |
内存使用 |
95.30 MiB |
提交时间 |
2025-01-14 20:56:14 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=2000010;
int t,n,tot1=0,tot2=0,a1[N][5],a2[N][5],sd1[N],sd2[N];
char s1[N],s2[N],x1[N],x2[N];
void init()
{
memset(a1,0,sizeof(a1));
memset(a2,0,sizeof(a2));
memset(sd1,0,sizeof(sd1));
memset(sd2,0,sizeof(sd2));
tot1=0,tot2=0;
}
int main() {
freopen("edit.in","r",stdin);
freopen("edit.out","w",stdout);
cin>>t;
while (t--)
{
init();
scanf("%d",&n);
scanf("%s%s%s%s",s1,s2,x1,x2);
for (int i=0;i<n;i++)
{
if (x1[i]!=x1[i-1])
{
tot1++;
}
sd1[i]=tot1;
if (x1[i]=='1')
{
a1[tot1][s1[i]-'0']++;
}
if (x2[i]!=x2[i-1])
{
tot2++;
}
sd2[i]=tot2;
if (x2[i]=='1')
{
a2[tot2][s2[i]-'0']++;
}
}
// cout<<tot1<<" "<<tot2<<endl;
int ret=0;
for (int i=0;i<n;i++)
{
if (x1[i]==x2[i] && x1[i]=='0')
{
if (s1[i]==s2[i])
{
ret++;
}
}
else if (x1[i]!=x2[i])
{
if (x1[i]=='1' && a1[sd1[i]][s2[i]-'0'])
{
a1[sd1[i]][s2[i]-'0']--;
ret++;
}
else if (a2[sd2[i]][s1[i]-'0'])
{
a2[sd2[i]][s1[i]-'0']--;
ret++;
}
}
}
for (int i=0;i<n;i++)
{
if (x1[i]==x2[i] && x1[i]=='1')
{
if (a1[sd1[i]][0] && a2[sd2[i]][0])
{
a1[sd1[i]][0]--;
a2[sd2[i]][0]--;
ret++;
}
else if (a1[sd1[i]][1] && a2[sd2[i]][1])
{
a1[sd1[i]][1]--;
a2[sd2[i]][1]--;
ret++;
}
}
}
printf("%d\n",ret);
}
}