题意:
给出一个二进制串,每次操作可以把相邻的0和1交换,求从原串到目标串的最少操作数,无解输出-1。
分析:
分析一下就是把src串中的1移到aim串的相应位上的最少步数。
①长度不相等或1数量不相等,输-1;
②记录pos[0],pos[1]为src,aim中第k个1的位置,直接累加答案。
讲的很简单,直接看代码就好。
给出一个二进制串,每次操作可以把相邻的0和1交换,求从原串到目标串的最少操作数,无解输出-1。
分析:
分析一下就是把src串中的1移到aim串的相应位上的最少步数。
①长度不相等或1数量不相等,输-1;
②记录pos[0],pos[1]为src,aim中第k个1的位置,直接累加答案。
讲的很简单,直接看代码就好。
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
const int MAXL = 5005;
char s1[MAXL], s2[MAXL];
int l1, l2;
int pos[2][MAXL], top[2];
int main()
{
scanf("%s\n%s\n", s1, s2);
l1 = strlen(s1);
l2 = strlen(s2);
if(l1 != l2)
puts("-1");
else
{
int a = 0, b = 0;
for(int i = 0; i < l1; ++i)
{
if(s1[i] == '+') pos[0][a++] = i;
if(s2[i] == '+') pos[1][b++] = i;
}
if(a != b)
puts("-1");
else
{
int ans = 0;
for(int i = 0; i < a; ++i)
ans += abs(pos[0][i]-pos[1][i]);
printf("%d\n", ans);
}
}
return 0;
}