问题描述
小蓝用黑白棋的n个棋子排成了一行,他在脑海里想象出了一个长度为n的01串T,他发现如果把黑棋当做1,白棋当做0,这一行棋子也是一个长度为的01
串S。
小蓝决定,如果在S中发现一个棋子和它两边的棋子都不一样,就可以将其翻转变成另一个颜色。也就是说,如果S中存在子串101或者010,就可以选择将其分别变为111和000,这样的操作可以无限重复。小蓝想知道最少翻转多少次可以把S变成和T一模一样。
输入格式
输入包含多组数据。
输入的第一行包含一个正整数D表示数据组数。后面2D行每行包含一个01串,每两行为一组数据第2i-1行为第讠组数据的,第2i行为第讠组数据的SS,和T长度均为n。
输出格式
对于每组数据,输出一行包含一个整数,表示答案,如果答案不存在请输出-1。
样例输入
2
1000111
1010101
0100
1100
样例输出
2
-1
代码
#include <iostream>
using namespace std;
int main()
{
int num,czcs;
cin>>num;
int result[num];
string a,b;
for (int i = 0; i < num; i++) {
cin>>a;
cin>>b;
czcs=0;
for (int j = 0; j <a.length() ; j++)
{
if (a[j]==b[j]);
else
{
if (j==0 && j==a.length()-1)
{
if (a[j-1]==b[j-1] && a[j+1]==b[j+1] && a[j-1]==a[j+1])
{czcs++;
}
else
{czcs=-1;
break;}
}
else
{czcs=-1;
break;
}
}
}
result[i]=czcs;
}
for (int i = 0; i < num; i++) {
printf("%d\n",result[i]);
}
return 0;
}
发表回复