#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
ll image[20][20],cpimg[20][20],his[256],color[16];
int trans(char a)
{
if(a <= '9') return a-'0';
return a-'A'+10;
}
char itrans(int n)
{
if (n >= 10) return (char)n - 10 + 'A';
return (char)n + '0';
}
int compress(int c)
{
int dis = 256, res = -1;
for (int i = 0; i < 16; i++)
{
int d = c - color[i];
if (d < 0) d = -d;
if (d < dis)
{
dis = d;
res = i;
}
}
return res;
}
int main()
{
ll N = 0, M = 0;
cin >> N;
for (ll i = 0; i < 256; i++) his[i] = -1;
for (ll i = 0; i < N; i++)
{
char line[50];
cin >> line;
M = strlen(line) / 2;
for (int j = 0; j < M; j++)
{
int c = trans(line[j * 2]) * 16 + trans(line[j * 2 + 1]);
image[i][j] = c;
his[c]++;
}
}
for (int c = 0; c < 16; c++)
{
int max = 0, max_id = -1;
for (int i = 0; i < 256; i++)
{
if (his[i] > max)
{
max = his[i];
max_id = i;
}
}
color[c] = max_id;
his[max_id] = -1;
}
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
cpimg[i][j] = compress(image[i][j]);
for (int c = 0; c < 16; c++) cout << itrans(color[c] / 16) << itrans(color[c] % 16);
cout << endl;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++) cout << itrans(cpimg[i][j]);
cout << endl;
}
return 0;
}
不知该代码有何bug,只有60分