problem link:http://codeforces.com/contest/1037/problem/C题意:给你分别含有n个字符的两个字符串a和b。你可以有两种操作最终将a字符串变成b字符串:第一种:交换字符串a中的任意两个位置i,j的字符的位置:消费为|i-j|;第二种:改变a中某一个位置的i的值,(把1变成0,或把0变成1),消费为1。问最少的消费是多少。解题思路:如果两个a[i]不等于b[i]则对调的消费一定高于反转的消费。所以遍历一遍a字符串,改变相邻的符合条件的对调即可。代码就很容易理解了。AC code: #include<bits/stdc++.h> using namespace std; string a,b;int n,ans; int main(){ ios::sync_with_stdio(false);cin.tie(0); cin>>n>>a>>b; for(int i=0;i<n;i++) if(a[i]!=b[i]){ if(i!=n-1&&a[i+1]==b[i]&&a[i]==b[i+1])a[i+1]=a[i]; ans++; } cout<<ans<<endl; }