题解 AT2201 【鏡文 / Mirror String】

rui_er

2019-02-13 14:19:31

Solution

首先,我们用字符串s1来进行操作,s用来对照。题目说1<=|s|<=10^5,因此数组开大一点。其次,容易想到,|s|是奇数时不可能满足条件,故加上: ```cpp if(l&1) { cout<<"No"<<endl; return 0; } ``` 其中```&```是```按位与运算``` 之后,分两步,如题。 写出下列代码: ```cpp for(int i=0;i<l;i++) s1[i] = s[l-i-1]; for(int i=0;i<l;i++) { if(s1[i] == 'b') s1[i] = 'd'; else if(s1[i] == 'd') s1[i] = 'b'; else if(s1[i] == 'p') s1[i] = 'q'; else s1[i] = 'p'; } ``` 综合以上,判断字符串相等,使用```strcmp()```。 综合所有,下为完整代码: ```cpp #include <iostream> #include <string.h> using namespace std; char s[100010]; char s1[100010]; int main() { cin>>s; int l = strlen(s); if(l&1) { cout<<"No"<<endl; return 0; } for(int i=0;i<l;i++) s1[i] = s[l-i-1]; for(int i=0;i<l;i++) { if(s1[i] == 'b') s1[i] = 'd'; else if(s1[i] == 'd') s1[i] = 'b'; else if(s1[i] == 'p') s1[i] = 'q'; else s1[i] = 'p'; } if(!strcmp(s1, s)) cout<<"Yes"<<endl; else cout<<"No"<<endl; return 0; } ```