CF1320F Blocks and Sensors

题目描述

Polycarp 正在玩一款著名的电脑游戏(我们就不提它的名字了)。在这款游戏中,每个物体都由三维方块组成——这些方块是边与坐标轴对齐、大小为 $1 \times 1 \times 1$ 的立方体。这些方块不受重力影响,因此可以悬浮在空中而无需支撑。每个方块被放置在一个 $1 \times 1 \times 1$ 的单元格中;每个单元格要么恰好包含一个方块,要么为空。每个单元格由其坐标 $(x, y, z)$ 表示(该单元格是一个立方体,对角点分别为 $(x, y, z)$ 和 $(x + 1, y + 1, z + 1)$),以及其内容 $a_{x, y, z}$;如果该单元格为空,则 $a_{x, y, z} = 0$,否则 $a_{x, y, z}$ 等于放置在其中的方块类型(类型为 $1$ 到 $2 \cdot 10^5$ 的整数)。 Polycarp 用方块搭建了一个大型结构。这个结构可以被一个边与坐标轴对齐的长方体包围,长方体的尺寸为 $n \times m \times k$,包含所有满足 $x \in [1, n]$、$y \in [1, m]$、$z \in [1, k]$ 的单元格。之后,Polycarp 在这个长方体的周围安装了 $2nm + 2nk + 2mk$ 个传感器。传感器是一种特殊方块,会向某个方向发射一条射线,并显示被该射线首先击中的方块的类型(不包括其他传感器)。Polycarp 安装的传感器紧贴长方体的边界,且它们发射的射线与某一坐标轴平行,并指向长方体内部。更具体地说,传感器可以分为 $6$ 种类型: - 有 $mk$ 个第一类传感器;每个安装在 $(0, y, z)$,其中 $y \in [1, m]$ 且 $z \in [1, k]$,它发射一条与 $Ox$ 轴正方向平行的射线; - 有 $mk$ 个第二类传感器;每个安装在 $(n + 1, y, z)$,其中 $y \in [1, m]$ 且 $z \in [1, k]$,它发射一条与 $Ox$ 轴负方向平行的射线; - 有 $nk$ 个第三类传感器;每个安装在 $(x, 0, z)$,其中 $x \in [1, n]$ 且 $z \in [1, k]$,它发射一条与 $Oy$ 轴正方向平行的射线; - 有 $nk$ 个第四类传感器;每个安装在 $(x, m + 1, z)$,其中 $x \in [1, n]$ 且 $z \in [1, k]$,它发射一条与 $Oy$ 轴负方向平行的射线; - 有 $nm$ 个第五类传感器;每个安装在 $(x, y, 0)$,其中 $x \in [1, n]$ 且 $y \in [1, m]$,它发射一条与 $Oz$ 轴正方向平行的射线; - 最后,有 $nm$ 个第六类传感器;每个安装在 $(x, y, k + 1)$,其中 $x \in [1, n]$ 且 $y \in [1, m]$,它发射一条与 $Oz$ 轴负方向平行的射线。 Polycarp 邀请了他的朋友 Monocarp 一起玩。当然,Monocarp 一看到被传感器方块包围的大长方体,就开始好奇里面到底有什么。Polycarp 不想直接告诉 Monocarp 结构的具体形状,于是只把所有传感器的数据给了他,让他自己猜测长方体内部的内容。 经过几个小时的思考,Monocarp 还是无法确定传感器包围空间内的结构。但他不想放弃,于是决定寻求帮助。你能写一个程序,分析传感器数据,并构造出任意一个与这些数据一致的结构吗?

输入格式

第一行包含三个整数 $n$、$m$ 和 $k$($1 \le n, m, k \le 2 \cdot 10^5$,$nmk \le 2 \cdot 10^5$),表示长方体的尺寸。 接下来是传感器的数据。对于每个传感器,其数据要么为 $0$(表示射线穿过整个长方体未遇到任何方块),要么为 $1$ 到 $2 \cdot 10^5$ 之间的整数,表示射线首先遇到的方块类型。数据分为 $6$ 个部分(对应 $6$ 种类型的传感器),每两个相邻部分之间有一个空行,第一个部分前也有一个空行。 第一部分包含 $m$ 行,每行 $k$ 个整数。第 $i$ 行第 $j$ 个整数是安装在 $(0, i, j)$ 的传感器的数据。 第二部分包含 $m$ 行,每行 $k$ 个整数。第 $i$ 行第 $j$ 个整数是安装在 $(n + 1, i, j)$ 的传感器的数据。 第三部分包含 $n$ 行,每行 $k$ 个整数。第 $i$ 行第 $j$ 个整数是安装在 $(i, 0, j)$ 的传感器的数据。 第四部分包含 $n$ 行,每行 $k$ 个整数。第 $i$ 行第 $j$ 个整数是安装在 $(i, m + 1, j)$ 的传感器的数据。 第五部分包含 $n$ 行,每行 $m$ 个整数。第 $i$ 行第 $j$ 个整数是安装在 $(i, j, 0)$ 的传感器的数据。 最后,第六部分包含 $n$ 行,每行 $m$ 个整数。第 $i$ 行第 $j$ 个整数是安装在 $(i, j, k + 1)$ 的传感器的数据。

输出格式

如果输入信息不一致,输出一个整数 $-1$。 否则,输出长方体内部的结构。输出应包含 $nmk$ 个整数,依次为 $a_{1, 1, 1}$,$a_{1, 1, 2}$,…,$a_{1, 1, k}$,$a_{1, 2, 1}$,…,$a_{1, 2, k}$,…,$a_{1, m, k}$,$a_{2, 1, 1}$,…,$a_{n, m, k}$,其中 $a_{i, j, k}$ 表示 $(i, j, k)$ 位置的方块类型,若该位置无方块则为 $0$。如果有多种与传感器数据一致的结构,输出任意一种即可。 为了方便阅读,样例输出按照如下格式给出:对于 $x = 1$、$x = 2$、…、$x = n$,分别输出 $n$ 个部分;每个部分包含 $m$ 行,每行 $k$ 个整数。注意,这种输出格式是允许的,但你也可以用其他格式输出(甚至所有整数在同一行),只要顺序正确即可。

说明/提示

由 ChatGPT 4.1 翻译