T289550 摆烂验题人CPX
题目背景
CPX同学,作为某CQ御用的验题人,每天都在受到某CQ所出题目的无情折磨,今天某CQ又出了一道题,CPX同学在马原课上盯了这道题两节课,终于从字缝里看出字来——整道题满满的都写着“矩阵变换”,某CQ在这道题中变着法子让做题人在这道题目里面辗转反侧,对某一个给定矩阵中的子矩阵进行各种各样的变换。
由于盯了两个多小时的屏幕,CPX同学在做这道题前已经感到老眼昏花,好像身体被掏空了,实在受不了某CQ带给他的无尽折磨,CPX同学这次决定摆烂一次,不给某CQ验题了。
一道题要是连正确性都没法保证,那还叫啥题目啊?
于是,检验这道题的光荣任务,就交到了你的手中!
题目描述
某CQ现在给了你一个N x M的矩阵,他现在想要进行Q次操作,每次操作某CQ会指定一个子矩阵和一种操作,他想让你对这个矩阵进行他指定的某种变换方式,具体的操作方式将会放在题目描述的尾部。
当Q次操作进行完之后,某CQ想要让你告诉他,经过这么多次变化的矩阵,最后长成什么样了?
操作类型1:
某CQ想要让你将他指定的子矩阵顺时针旋转90度。
操作类型2:
某CQ想要让你将他指定的子矩阵逆时针旋转90度。
操作类型3:
某CQ给定一个值k,需要你将这个子矩阵当中的所有元素加上k
操作类型4:
某CQ给定一个整数k,需要你将这个子矩阵当中的所有元素都乘上k
操作类型5:
某CQ需要你将这个矩阵的所有行倒过来(第一行变成第n行,第二行变成第n - 1行,以此类推)
操作类型6:
某CQ需要你将这个矩阵的所有列倒过来(与操作类型5同理)
操作类型7:
某CQ指定两个不相交的相同大小的子矩阵,将这两个子矩阵交换位置
其它操作类型:
操作类型编号可能为除1到7以外任何一个值,某CQ想让你歇一歇,这时不需要对矩阵进行任何变换。
另外,老老实实对每种操作写函数,某CQ不希望你将所有操作都塞在main函数里面。
输入格式
第一行三个整数N,M,Q,为题中表示的含义
接下来N行,每行M个整数,为给定的矩阵
接下来Q行,每行若干个整数,第一个整数表示操作类型。
如果操作类型为1或2或5或6,某CQ指定一个子矩阵的左上角坐标和右下角坐标,共4个正整数
如果操作类型为3或4,某CQ指定一个子矩阵的左上角坐标和右下角坐标以及k,共4个正整数和一个整数
如果操作类型为7,某CQ分别指定第一个子矩阵的左上角坐标和右下角坐标,以及第二个矩阵的左上角坐标和右下角坐标,共8个正整数。
如果操作类型为其他值,后面不输入任何数字。
输出格式
共N行,每行M个整数,为最终结果的矩阵。
说明/提示
样例解释
某CQ让你将整个矩阵顺时针旋转90度,再逆时针旋转90度,实际上并没有变化。
数据范围及约定
对于20%的数据,满足1