题目描述
翻转
注意:先输入$T_i$,再输入$S_i$
1、字符串两边不一样 return -1 ;
2、字符串相同 return 0 ;
3、对于中间部分,设 x 是0 / 1某种状态, ~x 为 x 的相反状态。
若 a[ i ] != b[ i ] ,当且仅当以下情况 ( b[ i ] != b[ i - 1 ] && b[ i ] != b[ i + 1 ] ) total ++ ;
a Ti x | x | x -> x | x | x
b Si x | ~x | x x | x | x
i-1 i i+1 i-1 i i+1
其余情况无法翻成 return -1;
C++ 代码
#include <iostream>
using namespace std;
#define int long long
int func(string a, string b)
{
if(a[0] != b[0]) return -1;
if(a[a.size()-1] != b[b.size()-1]) return -1;
if(a == b) return 0;
int total = 0;
for(int i = 1; i < a.size() - 1; ++ i)
{
if(a[i] != b[i])
{
if(b[i] != b[i+1] && b[i] != b[i-1])
{
if(b[i] == '0') b[i] = '1';
else b[i] = '0';
total ++;
}
else return -1;
}
}
return total;
}
signed main()
{
int q;
string a, b;
cin >> q;
while(q--)
{
cin >> a >> b;
printf("%lld\n",func(a,b));
}
return 0;
}