2254C2 C2
来源:Codeforces ★ 1200
本题活力0.33按难度、完成结果与训练证据估算
算法如山行则将至
题目描述
处理二进制字符串a到b的转换,要求计算最少操作次数,关键约束是特定子串替换规则。
思考与重做
王梓豪的同题记录 · 1 条
- 王梓豪 · 2026-08-05本次记录最后更新 2026.8.5
完成结果:未记录
记得开longlong
队友同题 · 1 人1 条记录
完成结果:未记录
尚无心得记录
代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
string a,b;
cin>>a>>b;
int cnta0=0,cnta1=0;
int cntb0=0,cntb1=0;
vector<int> va10,vb10,va11,vb11;
for(int i=0;i<n;i+=2)
{
if(a[i]=='1')
cnta0++;
if(b[i]=='1')
cntb0++;
if(a[i]=='1')
va10.push_back(i);
if(b[i]=='1')
vb10.push_back(i);
}
for(int i=1;i<n;i+=2)
{
if(a[i]=='1')
cnta1++;
if(b[i]=='1')
cntb1++;
if(a[i]=='1')
va11.push_back(i);
if(b[i]=='1')
vb11.push_back(i);
}
sort(va10.begin(),va10.end());
sort(vb10.begin(),vb10.end());
sort(va11.begin(),va11.end());
sort(vb11.begin(),vb11.end());
long long ans=0;
if(cnta0==cntb0 && cnta1==cntb1)
{ for(int i=0;i<va10.size();i++)
{
ans+=abs(vb10[i]-va10[i])/2;
}
for(int i=0;i<va11.size();i++)
{
ans+=abs(vb11[i]-va11[i])/2;
}
cout<<ans<<endl;
}
else
{
cout<<-1<<endl;
}
}
}