蓝桥杯/翻转 /c++/c

问题描述

    小蓝用黑白棋的n个棋子排成一行,他在脑海里想象出了一个长度为n的01串T,他发现如果把黑棋当作1,白棋当作0,这一行棋子也是一个长度为n的01串S。

    小兰决定,如果在S中发现一个棋子和他两边的棋子都不一样,就可以将其翻转变成另一个颜色。也就是说,如果S中存在字串101或010,就可以选择将其变成111和000,这样的操作可以无限重复。

    小蓝想知道最少翻转多少次可以把S变成和T一模一样

输入格式

    输入包含多组数据。输入的第一行包含一个正整数D包括数据组数/

     后面2D行每行包含一个01串,每两行为一组数据,第2i-1 行为第i组数据的Ti,第2i行为第i组数据的Si, Si 和Ti 长度均为ni .

输出格式

     对于每组数据,输出一行包含一个整数,表示答案,如果答案不存在请输入 -1 

样例输入 

2
1000111
1010101
01000
11000


样例输出
2
-1

 解题思路

1.对于每一个不同的字符,根据题意他需要和两边的字符都不同才可以翻转,如果相同,那么无法进行翻转,输出-1即可

2.对于首字母和尾字母,由于左右两边缺少字符,所以一定无法比较,若不同,直接输出-1 即可

3.可以将s改成t的样例,直接输出操作步骤res即可

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
using namespace std;
const int N=1e6+10;
char s[N],t[N];
int m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值