题目链接: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;
}