小明正在玩一个“翻硬币”的游戏。
桌上放着排成一排的若干硬币。我们用?*
?表示正面,用?o
?表示反面(是小写字母,不是零),比如可能情形是?**oo***oooo
,如果同时翻转左边的两个硬币,则变为?oooo***oooo
。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
两行等长字符串,分别表示初始状态和要达到的目标状态,每行长度小于?10001000。
数据保证一定存在至少一种方案可以从初始状态和要达到的目标状态。
一个整数,表示最小操作步数。
输入 #1复制
********** o****o****
输出 #1复制
5
输入 #2复制
*o**o***o*** *o***o**o***
输出 #2复制
1
source:蓝桥杯 2013 省 B 组 H 题
#include <bits/stdc++.h>
using namespace std;
int main()
{
int cnt=0;
string s1,s2;
cin>>s1>>s2;
for(int i=0; i<s1.size(); i++)
{
if(s1[i]!=s2[i])
{
if(s1[i]=='o')
{
s1[i]='*';
}
else if(s1[i]=='*')
{
s1[i]='o';
}
if(s1[i+1]=='o')
{
s1[i+1]='*';
}
else if(s1[i+1]=='*')
{
s1[i+1]='o';
}
cnt++;
}
}
cout<<cnt<<endl;
return 0;
}