问题描述
- 灰度图像共256级灰阶,编码范围为
00-FF(对应十进制0-255),每个像素点对应一个灰阶编码。请编写程序将其压缩为16级灰阶,对应编码0-F。
- 压缩规则:
- 统计所有灰阶的出现次数,取出现次数最多的前16种灰阶(若次数相同则按灰阶值从小到大排序),分别编号为
0-F。
- 其余灰阶需转换为16种基准灰阶中最接近的灰阶:计算待转换灰阶与16种基准灰阶的差值绝对值,绝对值最小的即为目标灰阶。
- 输入输出要求:
- 输入:多行等长字符串,每两个字符构成一个十六进制的像素灰阶值
- 输出:首先连续输出选中的16种基准灰阶编码(不足16种按实际数量输出),随后按行输出压缩后的编码,每行长度与原输入行对应像素数量一致。
输入描述
- 第一行输入正整数
n,表示像素数据的行数
- 后续输入
n行等长的十六进制字符串,每行每两个字符为一个像素灰阶
- 注意:输入时
cin/scanf等输入操作不得添加任何提示文本。
输出描述
- 首行输出选中的基准灰阶编码:按出现次数从多到少排序,次数相同则按灰阶值从小到大排序,每个灰阶为2位大写十六进制字符,连续拼接,最多32个字符(即16种灰阶),不足16种按实际输出。
- 后续
n行输出压缩后的编码,每个像素对应1位大写十六进制字符(0-F),无空格,每行长度与原输入行的像素数量一致。
样例输入1
10
00FFCFAB00FFAC09071B5CCFAB76
00AFCBAB11FFAB09981D34CFAF56
01BFCEAB00FFAC0907F25FCFBA65
10FBCBAB11FFAB09981DF4CFCA67
00FFCBFB00FFAC0907A25CCFFC76
00FFCBAB1CFFCB09FC1AC4CFCF67
01FCCBAB00FFAC0F071A54CFBA65
10EFCBAB11FFAB09981B34CFCF67
01FFCBAB00FFAC0F071054CFAC76
1000CBAB11FFAB0A981B84CFCF66
样例输出1
ABCFFF00CB09AC07101198011B6776FC
321032657CD10E
36409205ACC16D
B41032657FD16D
8F409205ACF14D
324F326570D1FE
3240C245FC411D
BF4032687CD16D
8F409205ACC11D
B240326878D16E
83409205ACE11D