首页 > 试题广场 >

压缩二维码

[编程题]压缩二维码
  • 热度指数:268 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

小欧的二维码转换服务上线了!只需要发送一个字符串,服务器就会把他转换成一个二维码发送给客户端。二维码是一个为  的方格子,里面每个  的格子都有黑或者白两种颜色。然而,没过多久,小欧的服务器就崩溃了。经过检查,小欧发现,服务器会生成一张二维码的图片,发送给客户端,而传输图片的流量大小过大,导致服务器瘫痪。聪明的小欧知道只有黑白格的二维码可以用比特位  和  来编码,编码后的传输效率远远大于图片。

小欧发明了一种编码方式:用  长度的二进制串来表示一个边长为  的二维码。他会逐行扫描该二维码,并且把扫描到的内容变成  比特流,其中  代表白色, 代表黑色。

现在给你一张二维码图,请你把他转换成比特流。


输入描述:

第一行一个数  。

接下来  行,每行  个字符,代表该二维码图形。其中  代表白色, 代表黑色。



输出描述:
\frac{ {2^n*2^n}}{4} 个整数,代表转换后的比特流。每个整数为4位比特位所组成的二进制数的值。
示例1

输入

1
.#
#.

输出

6
示例2

输入

2
.##.
#..#
##..
...#

输出

6 9 12 1

说明

逐行扫描后,得到的01比特流为:0110100111000001。
将4个比特位合成为一个整数,得到 6(0110) 9(1001) 12(1100) 1(0001)。
示例3

输入

3
#.##.#.#
#..#.##.
###.#.##
####.##.
##..#...
.##.#.#.
######.#
...##.#.

输出

11 5 9 6 14 11 15 6 12 8 6 10 15 13 1 10
n = int(input())

pic = ""

for i in range(2 ** n):
    pic += input()

res = []
for i in range(0, len(pic), 4):
    num = 0
    for j in range(4):
        num = num * 2 + (1 if pic[i + j] == "#" else 0)
    res.append(num)

print(*res)
发表于 2024-11-20 18:57:27 回复(0)