因为既要替换又要排列,而方法却有很多种,无法明确确定。但是知道明文中一些相同字符出现的次数跟密文出现的次数相同。所以可以根据这一点来进行计算。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<cmath>
#include<cstdlib>
#include<list>
#include<queue>
#define mm(a,b) memset(a,b,sizeof(a))
#define ACCELERATE (ios::sync_with_stdio(false),cin.tie(0))
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
#define MAXN 0x3f3f3f3f3f3f3f3f
#define PI acos(-1.0)
#define E exp(1.0)
using namespace std;
//#define debug
int main()
{
#ifdef debug
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif // debug
char s1[105],s2[105];
int c1[27],c2[27];
while(scanf("%s",s1)!=EOF){
scanf("%s",s2);
mm(c1,0);
mm(c2,0);
for(int i=0;s1[i];i++){
c1[s1[i]-'A']++;
}
for(int i=0;s2[i];i++){
c2[s2[i]-'A']++;
}
int i;
sort(c1,c1+26);
sort(c2,c2+26);
for(i=0;i<26;i++) if(c1[i]!=c2[i]) break;
if(i<26) printf("NO\n");
else printf("YES\n");
}
return 0;
}
/*
*/