用较好理解的方法ac这道题
简单的翻硬币问题 首先我们可以知道每次翻转只会增加或减少偶数个正面的(0,2)
题目说了保证有解 也就是当前序列与给定序列只会有相差偶数个正面需要翻转
所以我们从前往后遍历两个序列当碰到第一个不同的位置时记录下标 当碰到第二个时就可以计算把这两个位置翻转成目标序列所需要的次数 就是从第一个位置两两一直翻转第二个位置(想想可以理解,其实就是通过不改变正反面的个数将正反面移到需要的位置)
#include"iostream"
using namespace std;
int main(){
int res =0;
string s1,s2;
int l=-1;
cin>>s1>>s2;
int n = s1.size();
for(int i=0;i<n;i++){
if(s1[i]!=s2[i]){
if(l==-1){
l = i;
}else{
res+=i-l;
l =-1;
}
}
}
printf("%d",res);
return 0;
}