题目大意:有两种加密方式,一种替换字母,一种改变特定顺序。给出两串字符问能不能加密。总之加密方式并不重要因为都是随机的,题目一直看不懂,迷。
解题思路:只要第一行中每种字母出现的次数在第二行中能找到一种字母出现的顺序与其相等即可,没有字母和顺序要求。 说出来果然就太水了 - - 然而做题的时候并不能够想到。
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int a[30], b[30]; int cmp(int a, int b) { return a > b; } int main() { string s1, s2; while (cin >> s1 >> s2) { memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); for (int i = 0; i < s1.length(); i++) { a[s1[i] - 'A']++; b[s2[i] - 'A']++; } sort(a, a+26, cmp); sort(b, b+26, cmp); int p = 0, q = 0; while (a[p] && b[q]) { if (a[p] == b[q]) a[p] = b[q] = 0; p++; q++; } int tot = 0; for (int i = 0; i < 26; i++) tot += a[i]; printf(tot?"NO\n":"YES\n"); } return 0; }