题目描述

SR得到了一个n*m的矩阵,矩阵行列从1开始标号,每个格子有不同的权值,Steam为了测试SR的智力,决定给他q个操作,每次操作交换两个大小一样的子矩阵,并在操作完之后输出它。
每个操作由6个正整数\(A_i,B_i,C_i,D_i,H_i,W_i\)组成,分别表示第一个子矩阵的左上角位于哪一行和哪一列、第二个的,以及两个子矩阵的行数和列数。操作保证两个矩阵没有重叠,矩阵的边也不会接壤,即没有任何一条格子的边同时属于两个子矩阵的边界。但是允许角接壤,即

SR不想算,请你帮他操作并输出。

输入

第一行三个正整数n,m,q,表示矩阵大小n*m,有q个操作。
接下来n行,每行m个数,表示矩阵每个格子的权值\(v_{i,j}\)。
再接下来q行,每行6个正整数,表示一个操作。

输出

共n行,每行m个数,表示操作后的矩阵

样例输入

4 4 2
1 1 2 2
1 1 2 2
3 3 4 4
3 3 4 4
1 1 3 3 2 2
3 1 1 3 2 2

样例输出

4 4 3 3
4 4 3 3
2 2 1 1
2 2 1 1

提示

30%的数据:n,m<=100,q<=500
100%的数据:n,m<=1000,q<=10000,\(|v_{i,j}|<=1e9\),保证修改的子矩阵在大矩阵内。

分析

  • 可以把矩阵用类似于链表的一个东西来表示。每个节点都有一个编号,并在这个节点上记录它下边和右边的节点的编号。
  • 每次修改时,我们只要修改矩阵四周的节点所指向的节点编号。
  • 时间复杂度\(O(n^2+qn\))

代码

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=1050;
struct node{int right,down,val;
}e[maxn*maxn*2];
int h[maxn],t[maxn],tot;int tmp[maxn];
int main(){int n,m,q;scanf("%d%d%d", &n,&m,&q);for(int i = 0; i <= n; ++i) h[i]=++tot;for(int j = 1; j <= m; ++j) t[j]=++tot,tmp[j]=tot;t[0]=h[0];for(int i = 0; i <= n; ++i) e[h[i]].down=h[i+1];for(int j = 0; j <= m; ++j) e[t[j]].right=t[j+1];for(int i = 1; i <= n; ++i){int p=h[i];for(int j = 1; j <= m; ++j){int x;scanf("%d", &x);++tot;e[tot]=(node){0,0,x};e[p].right=tot;e[tmp[j]].down=tot;p=tmp[j]=tot;}}while(q--){int a,b,c,d,H,W;scanf("%d%d%d%d%d%d", &a,&b,&c,&d,&H,&W);if(H==0||W==0) continue;int x1=t[b-1],x2=t[b+W-1],x3=t[d-1],x4=t[d+W-1];int v1=h[a-1],v2=h[a+H-1],v3=h[c-1],v4=h[c+H-1];for(int i = 1; i <= a; ++i) x1=e[x1].down,x2=e[x2].down;for(int i = 1; i <= c; ++i) x3=e[x3].down,x4=e[x4].down;for(int j = 1; j <= b; ++j) v1=e[v1].right,v2=e[v2].right;for(int j = 1; j <= d; ++j) v3=e[v3].right,v4=e[v4].right;for(int i = 1; i <= H; ++i){swap(e[x1].right,e[x3].right);swap(e[x2].right,e[x4].right);x1=e[x1].down;x2=e[x2].down;x3=e[x3].down;x4=e[x4].down;}for(int i = 1; i <= W; ++i){swap(e[v1].down,e[v3].down);swap(e[v2].down,e[v4].down);v1=e[v1].right;v2=e[v2].right;v3=e[v3].right;v4=e[v4].right;}}for(int i = 1; i <= n; ++i){for(int j = e[h[i]].right; j ; j = e[j].right){printf("%d%s", e[j].val,e[j].right?" ":"\n");}}return 0;
}

转载于:https://www.cnblogs.com/sciorz/p/9115767.html

2018江苏冬令营5 交换矩阵相关推荐

  1. 南京林业大学计算机专升本,2018江苏专转本学校之:南京林业大学

    原标题:2018江苏专转本学校之:南京林业大学 PS:默默学的专转本高数老师,就南林博士,09-13连续5年参与专转本高数阅卷~ 可以看到地铁直达,所以交通还是很方便的!最显眼的是南林大厦,你在南林周 ...

  2. 矩阵分析与多元统计12 0-1矩阵 交换矩阵与Kronecker乘积

    矩阵分析与多元统计12 0-1矩阵 交换矩阵与Kronecker乘积 基本性质 用交换矩阵的构造证明基本性质 这一讲介绍交换矩阵与Kronecker乘积相关的性质.对于矩阵A∈Fm×nA \in F^ ...

  3. 矩阵分析与多元统计12 0-1矩阵 交换矩阵简介

    矩阵分析与多元统计12 0-1矩阵 交换矩阵简介 选择矩阵 交换矩阵 顾名思义,0-1矩阵就是所有元素取值均为0和1的矩阵,这类矩阵在矩阵分析.多元统计乃至组合学和图论中都有很重要的应用.在这个主题中 ...

  4. 专转本计算机专业录取分数线,2018江苏专转本各专业分数线一览!

    原标题:2018江苏专转本各专业分数线一览! 2018江苏专转本分数线梳理 018江苏专转本考试已过去四个月,分数线已经公布了三个多月. 按照分数线进行梳理大致情况如下: 300分以上院校专业 常州大 ...

  5. 常熟理工学院计算机考研,2018江苏专转本考生必看-常熟理工学院介绍

    原标题:2018江苏专转本考生必看-常熟理工学院介绍 这次轮到默默学介绍常熟理工学院啦!今年常熟理工学院有个专转本的学生,也是默默学专转本视频课程考上常熟理工的一个学生,叫黄群超,当年专转本计算机也考 ...

  6. 2018年通信工程师交换技术考试成绩查询

    2018年通信工程师考试已于2018年10月20日结束,考后考生最关注的两个问题,其一就是真题答案解析,其二就是成绩查询时间,本文为大家整理的就是关于2018年通信工程师交换技术考试成绩查询时间及入口 ...

  7. python矩阵交换两行_Python 实现交换矩阵的行示例

    Python 实现交换矩阵的行示例 如下所示: # TODO r1 r2 # 直接修改参数矩阵,无返回值 def swapRows(M, r1, r2): M[r1],M[r2] = M[r2],M[ ...

  8. 南财计算机应用基础试卷一,2018江苏专转本试卷

    2018江苏专转本试卷Tag内容描述: 1.Never Discard! Never Give up! Do Something Meaningful! Lead a Good Life! A Sta ...

  9. ACM-ICPC 2018 江苏站 I. T-shirt (含矩阵乘法结合律证明)

    链接 https://nanti.jisuanke.com/t/28873 题目来源 The 2018 ACM-ICPC China JiangSu Provincial Programming Co ...

最新文章

  1. 两个网站做到同一个服务器,两个网站放在同一个服务器 备案
  2. mysql对时间操作系统_MySQL时间操作的系统函数用法
  3. prototype中顶层元素的测试
  4. linux内核网络协议栈--linux网络设备理解(十三)
  5. 好用到爆的 Java 小技巧
  6. C++ STL : 模拟实现STL中的容器适配器stack和queue
  7. Configuration Manager 纯模式所需的 PKI 证书的分步部署示例
  8. 手机必备OCR文字识别软件:福昕扫描王使用攻略
  9. arm64入栈出栈_【iOS内功】ARM黑魔法—栈桢的入栈和出栈
  10. java课程设计学生信息管理_JAVA课程设计---学生基本信息管理系统
  11. 洛谷OJ - P1156 - 垃圾陷阱
  12. mysql上线脚本规范_专业规范的mysql启停脚本
  13. 水浊度传感器( ADC 代码详解)
  14. sqlserver中日期转字符串
  15. DNS 智能解析功能评测之国内部分总结篇~
  16. python linux 执行scp,python 使用标准库连接linux实现scp和执行命令
  17. 异步电机三相电流滞环矢量控制
  18. 一键制作所有微信好友头像墙照
  19. java 圆类 圆锥类_喉室位于_java程序设计答案_学小易找答案
  20. iOS App 常用的分类

热门文章

  1. 前端框架 Bootstrap 4.4.0 发布
  2. 使用HTML5和JavaScript创建音乐播放列表
  3. EF性能优化-有人说EF性能低,我想说:EF确实不如ADO.NET
  4. access insert语句怎么写_擦亮自己的眼睛去看SQLServer之简单Insert
  5. springBoot的一些注解以及静态资源的处理
  6. 训练效果不好的解决办法
  7. linux多cpu运行python脚本,linux系统使用python获取cpu信息脚本分享
  8. python大学_大学为什么不先开python?
  9. elementui el-upload 删除指定文件
  10. aix查看oracle用户密码,AIX详细查看用户/进程使用内存