题解:
传统的替换加密,是将每个字母依次在字母表顺序中向后移动N位,即每个字母移动相同的位数。于是我就按照这个观念去做了,枚举移动0到25位,然后看哪一次的字母出现次数于明文相同。但是这道题题目条件比较隐晦,实际上10个数据中有5个数据移动位数是不相同的,即每个字母都是变成另外的随机字母,只有相同的字母出现的次数才相同。实际上想到这一点,这道题也并不难,统计相同字母出现的次数,然后排序,对比明文和密文是否相同。
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<climits>
#include<stack>
#include<vector>
#include<queue>
#include<map>
#include<cctype>
#define ipt(x) scanf("%d",&x)
#define MAXA 200
using namespace std;
typedef long long LL;
char a[MAXA],b[MAXA];
int ref[MAXA],bref[MAXA],k;
int main() {
//freopen("cryptogram.in","r",stdin);
//freopen("cryptogram.out","w",stdout);
gets(a);
gets(b);
for(int i=0;i<strlen(b);i++)
bref[b[i] - 'A']++;
for(int i=0;i<strlen(a);i++)
ref[a[i] - 'A']++;
sort(bref,bref+26);
sort(ref,ref+26);
for(int i=0;i<26;i++)
if(bref[i] != ref[i]) {
printf("NO");
return 0;
}
printf("YES");
}