- 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;
}