题解 CF420A 【Start Up】

jijidawang

2020-04-21 17:12:49

Solution

**注意!这题不仅仅是判回文串!而是把它翻转过来,也就是要求字母轴对称且对称轴垂直于底平面!** ## 题面简述 > 判断字符串翻过来后是不是等于原样。 ## 算法分析 判回文串和轴对称字母即可。 轻易知:轴对称字母有:$\text{AHIMOTUVWXY}$ 这 $11$ 个,挨个判断是否在这 $11$ 个字母里即可。 判回文串用两个指针从左右往回走即可,一遍判回文一边判轴对称 代码: ```cpp #include<iostream> #include<cstring> using namespace std; int main() { string a;cin>>a; int len=a.length(); for (int i=0;i+i<=len;i++) //遍历一半,注意奇数长度用<= { int j=len-i-1; //一定要减一啊啊啊 if (a[i]!='A'&&a[i]!='H'&&a[i]!='I'&&a[i]!='M'&&a[i]!='O'&&a[i]!='T'&&a[i]!='U'&&a[i]!='V'&&a[i]!='W'&&a[i]!='X'&&a[i]!='Y'){cout<<"NO";return 0;} //判前半部分的轴对称 if (a[j]!='A'&&a[j]!='H'&&a[j]!='I'&&a[j]!='M'&&a[j]!='O'&&a[j]!='T'&&a[j]!='U'&&a[j]!='V'&&a[j]!='W'&&a[j]!='X'&&a[j]!='Y'){cout<<"NO";return 0;} //判后半部分的轴对称 if (a[i]!=a[j]){cout<<"NO";return 0;} //判回文 } cout<<"YES"; //一切满足 return 0; } ```