#include using namespace std; const int N = 256; int b[N]; // 桶 int a[17], al; string c[N]; int cl; int get(char x) { if (x >= '0' && x <= '9') return x - '0'; return x - 'A' + 10; } int toDec(char a, char b) { return get(a) * 16 + get(b); } int main() { int n; cin >> n; for (int i = 1; i <= n; i++) { string s; cin >> s; c[++cl] = s; // 原始数组保存下来 // 字符串长度 s.size() for (int j = 0; j < s.size(); j += 2) { int idx = toDec(s[j], s[j + 1]); // 对应的十进制数值 b[idx]++; // 维护桶 } } // 猴子选大王共16次 for (int i = 1; i <= 16; i++) { int mx = -1, mp = 0; for (int j = 0; j < N; j++) { if (b[j] > mx) { mx = b[j]; mp = j; } } a[++al] = mp; // 本轮次找到的大王位置是mp,记录下来到a数组中去 b[mp] = -1; // 避免重复选,把大王出列 } // 遍历原始数组 for (int i = 1; i <= n; i++) { for (int j = 0; j < c[i].size(); j += 2) { int old = toDec(c[i][j], c[i][j + 1]); // 需要与b数组中的每一个数值进行对比,看看与哪个数值的绝对值差最小,也就是与谁最接近` int mi = INT_MAX, mp = 0; // mi最小的差绝对值,mp就是最小差绝对值所在的位置号 for (int k = 1; k <= 16; k++) { int x = b[k]; int d = abs(x - old); if (d < mi) { mp = k; mi = d; } } if (mp >= 10) cout << mp - 10 + 'A'; else cout << mp; } cout << endl; } return 0; }