被难到了。感觉这种题多少有点找特殊情况简化问题的感觉,没用完全证明只有简单证明。
1.首先不同数字为奇数时候肯定无法成立,因为你一次就要改变两个值
2.当不同个数为2时候,如果你连续了,那你必须用x或者两个y来改变,如果不相同就直接y。
3.如果有多个不同数时候,那么最好情况肯定是cnt/2*y,每次用最小代价改变了一个数,并且此时大于2,那么每次总能选出一个大于1的距离进行修改。
4.hard version我也看了,真的难(挺佩服出题人这种只要改一下题目就能使难度大变样的能力。
#include "bits/stdc++.h"
using namespace std;
long long t,n,a[20010],b[20010],x,y;
int main()
{
cin>>t;
while(t--)
{
cin>>n>>x>>y;
long long cnt1=0,cnt2=0;
for(int i=1;i<=n;i++)
{
scanf("%1d",&a[i]);
}
long long cnt=0;
for(int i=1;i<=n;i++)
{
scanf("%1d",&b[i]);
if(b[i]!=a[i])
{
cnt1++;
cnt++;
}
else{
cnt2=max(cnt1,cnt2);
cnt1=0;
}
}
cnt2=max(cnt1,cnt2);
if(cnt%2==1)
{
cout<<-1<<endl;continue;
}
if(cnt==2)
{
if(cnt2==2)
{
cout<<min(x,y*2)<<endl;
}
else{
cout<<y<<endl;
}
}
else{
cout<<(cnt/2)*y<<endl;
}
}
return 0;
}