QOJ.ac

QOJ

Limite de temps : 1.0 s Limite de mémoire : 256 MB Points totaux : 100 Hackable ✓

#14315. 长方体木块

Statistiques

Noya 先生有一只喜欢啃木头的宠物仓鼠。

一天,Noya 先生带回家一个尺寸为 $L \times W \times H$ 的长方体木块,这意味着它的长度为 $L$ 个单位,宽度为 $W$ 个单位,高度为 $H$ 个单位,被划分为 $L \times W \times H$ 个单位立方体。以木块的一个顶点为原点,长度方向为 $x$ 轴,宽度方向为 $y$ 轴,高度方向为 $z$ 轴,建立空间直角坐标系 $O-xyz$。$x$ 坐标在 $[i - 1, i)$、$y$ 坐标在 $[j - 1, j)$ 且 $z$ 坐标在 $[k - 1, k)$ 的单位立方体记作 $(i, j, k)$。

注意:木块的长度不一定大于宽度(即不要求 $W \le L$);这些词汇仅用于确定方向。

Noya 先生不希望木块被他的仓鼠完全啃掉,因此他决定对其进行加固。加固位于 $(i, j, k)$ 的单位立方体的花费为 $V(i, j, k)$。此外,有三个矩阵 $A, B, C$ 分别表示来自三个正交视图(主视图、侧视图和俯视图)的限制:

  • 对于矩阵 $A = \{a_{ij}\}_{H \times L}$,如果 $a_{ij} = 0$,则对于所有 $1 \le p \le W$,位于 $(j, p, i)$ 的立方体都不能被加固。如果 $a_{ij} = 1$,则这些立方体中至少有一个必须被加固。
  • 对于矩阵 $B = \{b_{ij}\}_{H \times W}$,如果 $b_{ij} = 0$,则对于所有 $1 \le q \le L$,位于 $(q, j, i)$ 的立方体都不能被加固。如果 $b_{ij} = 1$,则这些立方体中至少有一个必须被加固。
  • 对于矩阵 $C = \{c_{ij}\}_{W \times L}$,如果 $c_{ij} = 0$,则对于所有 $1 \le r \le H$,位于 $(j, i, r)$ 的立方体都不能被加固。如果 $c_{ij} = 1$,则这些立方体中可以有任意数量(包括零个)被加固。

注意:Noya 先生对每个单位立方体最多只能加固一次。

注意:对于矩阵 $C$,非零值并不要求至少加固一个单位立方体。

在上述条件下,Noya 先生希望最小化加固木块的总花费。你能帮助他吗?

注意:你不需要考虑单位立方体悬空的问题。

输入格式

第一行包含一个正整数 $T$ ($1 \le T \le 5 \times 10^3$),表示测试用例的数量。

对于每个测试用例,第一行包含三个正整数 $L, W, H$ ($1 \le L \times W \times H \le 10^3$),表示木块的长度、宽度和高度。

下一行包含 $L \times W \times H$ 个整数。其中第 $[(i - 1) \times W + j - 1] \times H + k$ 个整数为 $V(i, j, k)$ ($-10^9 \le V(i, j, k) \le 10^9$)。

接下来 $H$ 行。第 $i$ 行是一个长度为 $L$ 的二进制字符串,记作 $a_{i1}a_{i2} \cdots a_{iL}$,表示矩阵 $A$ 的第 $i$ 行。

接下来 $H$ 行。第 $i$ 行是一个长度为 $W$ 的二进制字符串,记作 $b_{i1}b_{i2} \cdots b_{iW}$,表示矩阵 $B$ 的第 $i$ 行。

接下来 $W$ 行。第 $i$ 行是一个长度为 $L$ 的二进制字符串,记作 $c_{i1}c_{i2} \cdots c_{iL}$,表示矩阵 $C$ 的第 $i$ 行。

保证单个测试点中所有测试用例的 $L \times W \times H$ 之和不超过 $5 \times 10^3$。

输出格式

对于每个测试用例,第一行包含一个字符串 YESNO,表示 Noya 先生的条件是否可以被满足。

如果条件可以满足,则在第二行输出一个整数,表示加固长方体的最小花费;在第三行输出一个非负整数,表示加固的单位立方体数量 $k$;接下来 $k$ 行,每行包含三个正整数,表示每个被加固的单位立方体的坐标。注意,每个单位立方体最多只能被加固一次。

如果存在多个有效解,输出其中任意一个均被视为正确。

样例

输入样例 1

2
3 2 2
1 1 4 5 -1 4 -1 9 1 9 8 1
011
111
11
11
111
111
1 2 2
1 2 3 4
0
0
01
01
1
1

输出样例 1

YES
5
6
2 1 1
2 2 1
3 1 1
1 1 2
2 1 2
3 2 2
NO

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.