60分代码求调,谢谢
查看原帖
60分代码求调,谢谢
928675
GONGX楼主2024/7/10 17:08

60分代码如下

#include <bits/stdc++.h>
using namespace std;
string ch = "0123456789ABCDEF", s;
int n, m, a[20][20], t[256], c[16], cpa[20][20];
inline int tran(char cha) {
	if(cha <= '9')return cha - 48;//a - '0'
	return cha - 55;//a - 'A' + 10
}
inline int compress(int co) {// 寻找离 co 最近的灰阶
	int dis = 256, id = -1;
	for (int i = 0; i < 16; i++) {
		int d = abs(co - c[i]);
		if (d < dis)dis = d, id = i;
	}
	return id;
}
int main() {
	for (int i = 0; i < 256; i++)t[i] = -1;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> s, m = s.size() >> 1;
		for (int j = 0; j < m; j++)
			a[i][j] = (tran(s[j << 1])) * 16 + tran(s[j << 1 | 1]), t[a[i][j]]++;
	}
	/*for (int i = 0; i < n; i++, cout << '\n')
		for (int j = 0; j < len[i]; j++)cout << a[i][j] << ' ';*/
	for (int i = 0; i < 16; i++) {
		int max = 0, id = -1;
		for (int j = 0; j < 256; j++)
			if(t[j] > max)max = t[j], id = j;
		c[i] = id, t[id] = -1;
	}
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
			cpa[i][j] = compress(a[i][j]);
	for (int i = 0; i < 16; i++)
		cout << ch[c[i] / 16] << ch[c[i] % 16];
	for (int i = 0; i < n; i++) {
		cout << '\n';
		for (int j = 0; j < m; j++)cout << ch[cpa[i][j]]; 
	}
	return 0;
}
2024/7/10 17:08
加载中...