#include <iostream> #include <vector> #include <string> #include <algorithm> #include <cctype> #include <sstream> using namespace std; string merge(const string s1, const string s2) { string ans = s1 + s2; int size = ans.size(); // 按奇偶拆分字符串,分别排序 string even, odd; for (int i = 0; i < size; ++i) { i & 1 ? odd.push_back(ans[i]) : even.push_back(ans[i]); } sort(even.begin(),even.end()); sort(odd.begin(),odd.end()); ans.clear(); for (int i = 0, p = 0, q = 0; i < size; ++i) { // 合并时按照原来的奇偶顺序排列 i & 1 ? ans.push_back(odd[p++]) : ans.push_back(even[q++]); } return ans; } int to_int(char c) { if (c >= '0' && c <= '9') return c - '0'; else if (c >= 'A' && c <= 'F') return c - 'A' + 10; else if (c >= 'a' && c <= 'f') return c - 'a' + 10; return -1; } char reverse_bits(int val) { unsigned char m = 0x5; unsigned char n = 0x3; val = val >> 1 & m | (val & m) << 1; val = val >> 2 & n | (val & n) << 2; return val < 10 ? val + '0' : val - 10 + 'A'; } int main() { string word1,word2; while (cin >> word1 >> word2) { string ans; for (const auto &c : merge(word1,word2)) { int r = to_int(c); // 只处理十六进制字符,其他直接添加 if (r >= 0 && r <= 15) ans.push_back(reverse_bits(r)); else ans.push_back(c); } cout << ans << endl; } return 0; }