#include<bits/stdc++.h>
using namespace std;
string s[25];
int t[300];//统计每个像素出现的次数 
int ans1[20];//存前16种数量出现最多的灰阶 
int to_10(char c){
	if('0'<=c&&c<='9')return c-'0';
	return c-'A'+10;
}
char to_16(int c){
	if(c<10){
		return c+'0';
	}else{
		return c-10+'A';
	}
}
int cmp(int k){//返回距离k最近的点 
	int dis=1000,ti;
	for(int i=0;i<16;i++){
		int d = abs(k-ans1[i]);
		if(d<dis){
			dis=d;
			ti=i;
		}
	} 
	return ti;
}
int main() {
	int n;
	cin >> n;
	for(int i=0;i<n;i++){
		cin >> s[i];
		for(int j=0;j<s[i].size();j+=2){
			int d=to_10(s[i][j])*16 + to_10(s[i][j+1]);
			t[d]++;   // 统计每个灰阶出现的次数 
		} 
	}
	for(int i=0;i<16;i++){
		int maxa=-1,indexj;
		for(int j=0;j<=255;j++){
			if(maxa<t[j]){
				maxa = t[j];
				indexj = j;
			}
		} 
		ans1[i]=indexj;
		t[indexj]=-1;
	} 
	for(int i=0;i<16;i++){
		cout << to_16(ans1[i]/16)<<to_16(ans1[i]%16);
	}
	cout << endl;
	for(int i=0;i<n;i++){
		for(int j=0;j<s[i].size();j+=2){
			int d=to_10(s[i][j])*16 + to_10(s[i][j+1]);
			d = cmp(d);//找到距离d最近的像素点
			cout<< to_16(d); 
		} 
		cout << endl;
	}
	return 0;
}

0 comments

No comments so far...

Information

ID
2111
Time
1000ms
Memory
256MiB
Difficulty
10
Tags
(None)
# Submissions
4
Accepted
2
Uploaded By