#P1610. Quad Trees

Quad Trees

题目描述

二进制图像(如图2(a)所示)通常用二进制数组表示,数组中的每个元素为0或1(如图2(b))。为存储这类图像,常使用四叉树分割法:

  • 对于一个N×N的数组(N≤512且为2的幂),若所有元素值相同,则无需分割;
  • 否则,将其分割为4个N/2×N/2的子数组(如图2(c)),对每个子数组递归应用上述规则,直到所有子数组内的元素值唯一。

四叉树的存储方式如下:

  • 根节点代表原始数组。
  • 若节点对应数组需分割(即元素值不唯一),则节点值为1,且包含四个子节点。
  • 若节点对应数组无需分割,节点值为0,后跟该数组的元素值(0或1)。

将四叉树的节点值按层序遍历(从根到叶子,每层从左到右)排列,删除括号和逗号后得到一个二进制串。本题要求将该二进制串转换为十六进制输出。

输入格式

  • 第一行包含整数k(1≤k≤100),表示测试用例数。
  • 每个测试用例:
    • 第一行是整数N(N≤512且为2的幂),表示图像大小为N×N。
    • 后续N行,每行包含N个用空格分隔的二进制数(0或1),表示图像数组。

输出格式

对每个测试用例,输出对应的二进制串的十六进制表示。

输入示例 1

3  
2  
0 0  
0 0  
4  
0 0 1 1  
0 0 1 1  
1 1 0 0  
1 1 0 0  
8  
0 0 0 0 0 0 1 1  
0 0 0 0 0 0 1 1  
0 0 0 0 0 1 0 0  
0 0 0 0 0 1 0 0  
1 1 1 1 0 0 0 0  
1 1 1 1 0 0 0 0  
1 1 1 1 1 1 1 1  
1 1 1 1 1 1 1 1  

输出示例 1

0  
114  
258C0511  

来源

亚洲高雄竞赛 2003