题目描述
小西突然觉得回文串是一种非常优雅的东西,她突然想要把身边所有的字符串都变成回文!
所谓回文串就是一个倒置后仍与自身相等的字符串,如“gxuacmmcauxg”和“gxuacmcauxg”。
小西不喜欢单身狗,所以小西只会处理长度为偶数的字符串。
小西也不喜欢肥宅,所以小西处理的字符串只有小写英文字母。
但是小西是个肥宅,不怎么喜欢活动,所以小西对于每个字母只会将其变为与其相邻的字母,如‘b'可以变为'a'和'c','g'可以变为'f'和'h'。但是'a'只能变为'b',‘z’只能变为'y'。
小西虽然是肥宅,但也想要运动,所以她会把字符串的每一个字母都进行一次变换。
_(:з」∠)_
现在请聪明的你来救救肥宅,判断小西能否将该字符串变为回文。
输入描述:
第一行为一个整数T,表示数据组数
接下来行为T组数据
每组数据第一行为一个整数n表示字符串的长度
第二行为小西将要处理的字符串
输出描述:
对于每组数据,若小西能够将其变为回文则输出一行一个数字1
否则输出一行一个数字0
示例1
输入
复制
2
2
zb
6
abccba
输出
复制
0
1
#include<bits/stdc++.h>
#define maxn 100005
#define inf 0x3f3f3f3f
#define eps 1000000007
#define ll long long
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int flag=0;
int n;
char str[300];
cin>>n;
cin>>str;
if(n%2!=0)
{
cout<<"0"<<endl;
continue;
}
for(int i=0; i<n; i++)
{
if(str[i]>='A'&&str[i]<='Z')
{
flag=1;
}
}
for(int i=0; i<n/2; i++)
{
if(str[i]=='a')
{
if(!(str[n-i-1]=='a'||str[n-i-1]=='c'))
{
flag=1;
}
}
else if(str[i]=='z')
{
if(!(str[n-i-1]=='z'||str[n-i-1]=='x'))
{
flag=1;
}
}
else
{
if(!(str[i]+1==str[n-i-1]+1||str[i]-1==str[n-i-1]-1||str[i]-1==str[n-i-1]+1||str[i]+1==str[n-i-1]-1))
flag=1;
}
}
if(flag==1)cout<<"0"<<endl;
else cout<<"1"<<endl;
}
}