CodeForces 1027A-Palindromic Twist

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SZU_Crayon/article/details/82147580
  • CodeForces 1027A-Palindromic Twist


  • 题目链接:

A. Palindromic Twist

  • 思路:

题目大意:

给定一个长度为n的字符串,规定每个字符可以转变为相邻字符 ,比如 c->b,c->d,当然z只能变成y,a只能变成b,要求字符串中每个字符都必须转变一次,能否变成回文字符串(左右读都一样)

题解:

很高兴 a z不能互转,不然还需分开讨论

折半对称问题,其实就是问每个字符和对称面字符(i 与 n-i-1)改变一次后能不能相等

a.两个字符的ASCII码差距大于2,显然这种情况下不可能改变后相等

b.差距为2(中间隔着一个字符),两个字符都变成它们中间那个字符

c.差距为一(相邻),两个字符都要改变,不可能

d.两个字符相等,转成相同的就可以

  • 代码:

#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
#define MAX_SIZE 105
char Str[MAX_SIZE];
int main()
{
    int T,n;
    cin>>T;
    while(T--)
    {
        int flag=0;
        cin>>n;
        cin>>Str;
        for(int i=0;i<n/2;i++)
        {
            if(abs(Str[i]-Str[n-i-1])==2||abs(Str[i]-Str[n-i-1])==0)
                continue;
            else
            {
                flag=1;
                break;
            }
        }
        if(flag)
            cout<<"NO"<<endl;
        else
            cout<<"YES"<<endl;
    }
    return 0;
}

 

猜你喜欢

转载自blog.csdn.net/SZU_Crayon/article/details/82147580
今日推荐