本题考查字符串的操作,思路挺明确的,难点在于中间穿插了很多字符串分割、排序、进制转换等方面的问题。

#include 
#include 
#include 
#include 
#include 
using namespace std;
static bool cmp(const string &a, const string &b) {
    return a < b;
}
int main() {
    string s;
    getline(cin, s, '\n');
    vector str_vec;
    istringstream is(s);
    string seg;
    while (getline(is, seg, ' ')) str_vec.push_back(seg);
    string str = str_vec[0] + str_vec[1];   // 第一步

    // 第二步
    vector seg1, seg2;
    for (int i = 0; i < str.size(); i++) {
        if (i % 2 == 0) seg1.push_back(string(1, str[i]));
        else seg2.push_back(string(1, str[i]));
    }
    sort(seg1.begin(), seg1.end(), cmp);
    sort(seg2.begin(), seg2.end(), cmp);
    string str2;
    int index1 = 0, index2 = 0;
    for (int i = 0; i < str.size(); i++) {
        if (i % 2 == 0) {
            str2 = str2 + seg1[index1];
            index1++;
        } else {
            str2 = str2 + seg2[index2];
            index2++;
        }
    }

    // 第三步
    for (int i = 0; i < str2.size(); i++) {
        if ((str2[i] >= '0' && str2[i] = 'a' && str2[i] = 'A' && str2[i] <= 'F')) {
            // 十六进制转换为十进制
            int val;
            // '0'-> 48 
            if (str2[i] >= '0' && str2[i] <= '9') val = str2[i] - 48;
            // 'A'->65
            if (str2[i] >= 'A' && str2[i] <= 'F') val = str2[i] - 65 + 10;
            // 'a'->97
            if (str2[i] >= 'a' && str2[i] <= 'f') val = str2[i] - 97 + 10;
            // 十进制转换为二进制
            string temp;
            while (val / 2) {
                temp = temp + to_string(val % 2);
                val = val / 2;
            }
            temp = temp + to_string(val % 2);
            // 补齐四位的二进制
            if (temp == "1") temp = "1000";
            else if (temp == "11") temp = "1100";
            else if (temp == "01") temp = "0100";
            else if (temp == "10") temp = "1000";
            else if (temp == "100") temp = "1000";
            else if (temp == "101") temp = "1010";
            else if (temp == "110") temp = "1100";
            else if (temp == "111") temp = "1110";
            else if (temp == "011") temp = "0110";
            else if (temp == "010") temp = "0101";
            else if (temp == "001") temp = "0010";
            else if (temp == "000") temp = "0000";
            // 再将二进制转换回十进制
            val = stoi(temp);
            int dec = 0, p = 1;
            while (val) {        
                dec += (val % 10) * p;
                p *= 2;
                val /= 10;
            }
            // 再将十进制转换回十六进制
            if (dec >= 0 && dec <= 9) {
                switch (dec) {
                    case 0:
                    str2[i] = '0';
                    break;
                case 1:
                    str2[i] = '1';
                    break;
                case 2:
                    str2[i] = '2';
                    break;
                case 3:
                    str2[i] = '3';
                    break;
                case 4:
                    str2[i] = '4';
                    break;
                case 5:
                    str2[i] = '5';
                    break;
                case 6:
                    str2[i] = '6';
                    break;
                case 7:
                    str2[i] = '7';
                    break;
                case 8:
                    str2[i] = '8';
                    break;
                case 9:
                    str2[i] = '9';
                    break;  
                }
            } else if (dec >= 10 && dec <= 15) {
                switch (dec) {
                    case 10:
                        str2[i] = 'A';
                        break;
                    case 11:
                        str2[i] = 'B';
                        break;
                    case 12:
                        str2[i] = 'C';
                        break;
                    case 13:
                        str2[i] = 'D';
                        break;
                    case 14:
                        str2[i] = 'E';
                        break;
                    case 15:
                        str2[i] = 'F';
                        break;
                }
            }
        } else {
            continue;
        }
    }
    cout << str2 << endl;
    return 0;
}