cf 1006 D. Two Strings Swaps

这道题要考虑每个位置和他相对位置上面有几个不相同的字符,如果四个都不同,就修改两个。如果三个不同,而a[i]==a[n-i+1],则修改两个,其余情况修改一个,如果两个不同,则不需要修改

主要看a,b串相对位置上的值不同的有几个,这样会好讨论很多。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    string a,b;
    cin>>a;
    cin>>b;
    a='0'+a;
    b='0'+b;
    int res=0;
    for(int i=1;i<=n/2;i++)
    {
        //printf("%d\n",i);
        if(a[i]==b[i])
        {
            if(a[n-i+1]!=b[n-i+1])
               res++;
        }
        else
        {
            if(a[i]==a[n-i+1]&&b[i]==b[n-i+1]||a[i]==b[n-i+1]&&b[i]==a[n-i+1])
            {
                continue;
            }
            else if(a[i]==b[n-i+1]||b[i]==a[n-i+1]||a[n-i+1]==b[n-i+1]||b[i]==b[n-i+1])
               res++;
            else 
               res+=2;
        }
        //printf("**%d\n",res);
    }
    if(n%2==1)
    {
        if(a[n/2+1]!=b[n/2+1])
          res++;
    }
    printf("%d\n",res);
}

猜你喜欢

转载自www.cnblogs.com/lishengkangshidatiancai/p/10309727.html