#include <bits/stdc++.h>
using namespace std;
int n;
char s[30][30];
struct grey {
pair<char, char>cl;
int cnt;
} gr[256];
map<pair<char, char>, bool>bct;
map<pair<char, char>, pair<char, int>>mp;
void initgrey() {
for (int i = 0; i < 256; i++) {
gr[i].cnt = 0;
}
return;
}
int st_t(pair<char, char>st) {
int sl = st.first >= 0 && st.first <= 9 ? st.first - '0' : st.first - 'A' + 10;
int gl = st.second >= 0 && st.second <= 9 ? st.second - '0' : st.second - 'A' + 10;
return sl * 16 + gl;
}
char t_st(int t) {
return t < 10 ? t + '0' : t - 10 + 'A';
}
bool cmp(grey p1, grey p2) {
return p1.cnt == p2.cnt ? st_t(p1.cl)<st_t(p2.cl): p1.cnt>p2.cnt;
}
int main() {
cin >> n;
initgrey();
for (int i = 0; i < n; i++) {
cin >> s[i];
for (int j = 0; j < strlen(s[i]); j += 2) {
pair<char, char>gr16 = make_pair(s[i][j], s[i][j + 1]);
int gr10 = st_t(gr16);
gr[gr10].cl = gr16;
gr[gr10].cnt++;
}
}
sort(gr, gr + 256, cmp);
for (int i = 0; i < 16; i++) {
cout << gr[i].cl.first, gr[i].cl.second;
char ch = t_st(i);
mp[gr[i].cl] = make_pair(ch, st_t(gr[i].cl));
bct[gr[i].cl] = true;
}
for (int i = 0; i < n; i++) {
cout << endl;
for (int j = 0; j < strlen(s[i]); j += 2) {
pair<char, char>str = make_pair(s[i][j], s[i][j + 1]);
if (bct[str]) {
cout << mp[str].first;
} else {
int t1 = st_t(str), d_min = 260;
char ch;
for (int k = 0; k < 16; k++) {
int d = abs(st_t(gr[k].cl) - t1);
if (d < d_min) {
d_min = d;
ch = t_st(k);
}
}
cout << ch;
}
}
}
return 0;
}
rt,大佬们帮忙看看 (@ZsH68112zSh,你的题解到底行不行啊?)