题目链接:http://codeforces.com/contest/1006/problem/D
题意是给了两个字符串a和b,然后可以对这两个字符串有三种操作来使这两个字符串相等,一是交换a[i]和b[i],二是交换a[i]和a[n-i+1],三是交换b[i]和b[n-i+1],这三个操作都是不计步数的,然后问最少还需要多少步可以让a串等于b串。
思路就是模拟,依次判断上述三种情况能不能进行操作,然后加上对应的步数就好了,最后如果是奇数的长度的话还要判断一下中间的字符是否相同。
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int len;
string a,b;
int main()
{
cin>>len>>a>>b;
int ans = 0;
for(int i=0;i<len/2;i++){
int l = i, r = len - i - 1;
if(a[l] == b[l] && a[r] == b[r] || a[l] == b[r] && a[r] == b[l] || a[l] == a[r] && b[l] == b[r])
continue;
else if(a[l] == b[l] || a[r] == b[r] || a[l] == b[r] || a[r] == b[l] || b[l] == b[r])
ans++;
else
ans += 2;
}
if(len % 2 == 1 && a[len/2] != b[len/2])ans++;
cout<<ans<<endl;
return 0;
}