题目链接:​​http://www.dotcpp.com/oj/problem1453.html​​ 思路:这道题其实隐藏了一个条件,初始状态和目标状态不同之处肯定只有偶数处,不可能有奇数处,不然初始状态到达不了目标状态,把初始状态和目标之处的相同之处标记为0不同之处标记为1。先举一个例子1011001,是先翻中间的2个1呢还是一次翻呢,先翻中间2个1,总共的次数是6次,一次翻总共是5次,其实只要依次翻就是最少的,自己可以画一下,总的次数就是依次2个1的下标之差的总和

#include<bits/stdc++.h>
using namespace std;
#define ll long long int
int main()
{
bool flag;
int k,ans;
string a,b;
while(cin>>a>>b)
{
ans=0;
flag=true; //初始化
for(int i=0;i<a.length();i++)
{
if(a[i]!=b[i])
{
if(flag) //如果第一次遇见不同
{
k=i; //记录下开始翻动的初始位置
flag=false; //并且标记已经遇见了第一次不同
}
else //如果第二次遇见不同
{
ans+=i-k; //取得翻动的距离
flag=true; //初始化
}
}
}
cout<<ans<<endl;
}
return 0;
}