题意:有两个字符串,第一个字符串的任意两个字符可以交换位置,交换位置后的两个字符要+1,也就是a变成b,z变成a,问第一个字符串能否最终变成第二个字符串。
分析:
神题!
长度为2的和长度大于2的分开讨论,但是都是直接yy大法。
长度为2的好想,自己想。长度大于2的,这篇博客写得很详细点击打开链接,谢谢博主。
代码:
#include<iostream>
#include<string>
using namespace std;
int t;
string a,b;
int main()
{
cin>>t;
for(int cas=1;cas<=t;cas++){
cin>>a>>b;
int len=a.length();
cout<<"Case #"<<cas<<": ";
if(len>2){
int n=0,m=0;
for(int i=0;i<len;i++){
n+=a[i];
m+=b[i];
}
if((n&1)==(m&1)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
else{
if(((a[0]-b[0]+26)%26)==((a[1]-b[1]+26)%26)&&(a[0]-b[0])%2==0||((a[0]-b[1]+26)%26)==((a[1]-b[0]+26)%26)&&(a[1]-b[0]+1)%2==0) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
}