#4215. 图像压缩(23-6四级)

图像压缩(23-6四级)

图像压缩

【问题描述】

  1. 灰度图像有256级灰阶,编码00-FF,对应0-255,即图像有很多点,每个点取值 是00到FF。编程压缩到16级灰阶,对应0-F。
  2. 压缩规则:统计出每种灰阶的数量,取数量最多的前16种灰阶(如某种灰阶的数量 与另外一种灰阶的数量相同,则以灰阶值从小到大为序),分别编号0-F。其他灰 阶转换到最近的16种灰阶之一,将某个点灰阶数与16种灰阶种的一种相减,绝对 值最小即为最近。
  3. 输入:多行数据,每行数据等长,每两个字符构成一个点,十六进制;输出:首先 连续最多输出16种灰阶编码,不足16种灰阶就按实际输出;然后各行输出压缩后 的编码,每行等长。

【输入描述】

  1. 第1次输入正整数n,表示有多少行数据。

| 2. 3. | 随后输入n行数据。 特别提示:常规程序中,输入时好习惯是有提示。考试时由于系统限定,输入时所 |

inpu​​t​​**(​)​**函数不可有提示信息。

【输出描述】

  1. 首先输出16种灰阶编码,共计32个字符。不足16种按实际输出。输出数量最多 的16种灰阶,从多到少;如某种灰阶的数量与另外一种灰阶的数量相同,则以灰阶 值从小到大为序;
  2. 特别提示:注意输出字母为大写,小写将判为错误,数本身与字母T和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

【解析】

本题考察进制转换、排序、字典及其函数等,首先根据输入的第一个数表示后面有多少行数据,所以先接收N,后面for循环分别接收每组数据存放在列表中。遍历这一组数据,采用切片,把数据每两个十六进制字符分为一组,再以这两个十六进制字符为字典的键,以出现的次数作为值,用字典存储起来,这样就将每种灰阶出现的次数全部统计好了,然后使用sorted进行排序由大到小排序参数reverse=True,把结果再切片,取前16个,所以写法是[:16],即从下标0到下标15,然后在排序的过程中遵循先按着出现次数由大到小,如果出现次数相同,则以灰阶自身的值由小到大为序,所以函数内部有-int(x[0], 16)写法,这样出现次数最多的16种灰阶就已经排序存储好了,最后遍历输出top16,就可以成功打印输出结果的第一行(由大到小出现次数最多的16种灰阶)。接下来遍历前面输入的每组数据都存入的列表rawData,将字典和两个一组十六进制数据为参数传入自定义行数

Limitation

1s, 1024KiB for each test case.