#P1993. Caleidoscope
Caleidoscope
题目描述
我们设想即使是年幼的孩子们也会玩KOKODáKH(一种玩具)。因此,除了各种游戏和谜题外,我们还需要至少包含一种玩具。这种玩具非常受欢迎,不需要任何特殊知识或技巧就能玩。没错,它就是万花筒(Caleidoscope)。我想大家都知道这个神奇的玩意儿——你可以长时间观察它,不断发现新的、永不重复的图案。但问题是,小孩子会破坏他们拥有的所有东西,所有物品都会从他们手中掉到地上。传统万花筒的机械结构非常精密,因此对操作方式十分敏感。为此,我们设计的电子版万花筒完全没有机械部件,而是纯电子的。它的主要优点是防水、防火、耐寒、不易损坏,也不会起火。此外,它还配备了特殊的牙齿检测器,能在孩子咬它时立即触发电击(@@@)作为反应。
电子万花筒的主要问题在于图像生成。为了达到机械万花筒的视觉效果,图像必须由许多相似的片段组成,这些片段需要经过缩放、镜像和旋转处理。许多读者可能知道,在计算机图形学中,我们使用矩阵来处理图像变换。所谓的变换矩阵定义了要对图像执行的操作,而图像处理则是通过矩阵乘法实现的。我们还可以通过连续乘以多个矩阵来执行多次变换。由于万花筒中的图像处理非常复杂,涉及的矩阵可能非常大。你的任务是编写一个程序,能够将给定的初始矩阵与一系列其他矩阵相乘。
矩阵乘法规则
当我们将矩阵(维度)与矩阵(维度)相乘时,得到的结果矩阵的维度为。其中,矩阵的第行第列元素是矩阵的第行与矩阵的第列的点积,计算公式为:
=,
输入
第一行是一个正整数,表示测试用例的数量。
每个测试用例的第一行是一个整数,表示需要相乘的矩阵数量。
接下来是个矩阵的描述:
每个矩阵描述的第一行是两个整数和,分别表示矩阵的行数和列数。
接下来的行,每行包含个用空格分隔的整数,表示矩阵的元素。
题目保证所有矩阵的维度是兼容的(即前一个矩阵的列数等于后一个矩阵的行数),且所有中间结果和最终结果都不会超出整数范围
输出
对于每个测试用例,输出最终相乘得到的矩阵,维度为。
输出包含行,每行个用空格分隔的整数。
每个测试用例的输出结束后,打印一个空行(包括最后一个测试用例)
输入样例1
2
2
3 1
1
2
3
1 3
3 2 1
2
2 2
-1 1
-1 1
2 2
1 2
3 4
输出样例1
3 2 1
6 4 2
9 6 3
2 2
2 2
题目来源
CTU Open 1999