【题目链接】

点击打开链接

【算法】

链表,对于每个点,存它的上,下,左,右分别是谁

【代码】

#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000 struct node {
int val;
node *l,*r,*u,*d;
} mat[MAXN+][MAXN+]; int i,j,x,N,M,Q,A,B,C,D,H,W;
node *pos; template <typename T> inline void read(T &x) {
int f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; }
for (; isdigit(c); c = getchar()) x = x * + c - '';
x *= f;
} template <typename T> inline void write(T x) {
if (x < ) { x = -x; putchar('-'); }
if (x > ) write(x/);
putchar(x%+'');
} template <typename T> inline void writeln(T x) {
write(x);
puts("");
} inline void modify(int X1,int Y1,int X2,int Y2,int W,int H) {
int i;
node *pos1,*pos2,*tmp1,*tmp2;
pos1 = &mat[X1][]; pos2 = &mat[X2][];
for (i = ; i <= Y1; i++) pos1 = pos1 -> r;
for (i = ; i <= Y2; i++) pos2 = pos2 -> r;
tmp1 = pos1; tmp2 = pos2;
for (i = ; i <= W; i++) {
tmp1 -> l -> r = tmp2;
tmp2 -> l -> r = tmp1;
swap(tmp1->l,tmp2->l);
tmp1 = tmp1 -> d; tmp2 = tmp2 -> d;
}
tmp1 = pos1; tmp2 = pos2;
for (i = ; i < H; i++) tmp1 = tmp1 -> r;
for (i = ; i < H; i++) tmp2 = tmp2 -> r;
for (i = ; i <= W; i++) {
tmp1 -> r -> l = tmp2;
tmp2 -> r -> l = tmp1;
swap(tmp1->r,tmp2->r);
tmp1 = tmp1 -> d; tmp2 = tmp2 -> d;
}
tmp1 = pos1; tmp2 = pos2;
for (i = ; i <= H; i++) {
tmp1 -> u -> d = tmp2;
tmp2 -> u -> d = tmp1;
swap(tmp1->u,tmp2->u);
tmp1 = tmp1 -> r; tmp2 = tmp2 -> r;
}
tmp1 = pos1; tmp2 = pos2;
for (i = ; i < W; i++) tmp1 = tmp1 -> d;
for (i = ; i < W; i++) tmp2 = tmp2 -> d;
for (i = ; i <= H; i++) {
tmp1 -> d -> u = tmp2;
tmp2 -> d -> u = tmp1;
swap(tmp1->d,tmp2->d);
tmp1 = tmp1 -> r; tmp2 = tmp2 -> r;
}
} int main() { read(N); read(M); read(Q);
for (i = ; i <= ; i++) {
for (j = ; j <= ; j++) {
mat[i][j].r = &mat[i][j+];
mat[i][j].d = &mat[i+][j];
mat[i][j].l = &mat[i][j-];
mat[i][j].u = &mat[i-][j];
}
}
for (i = ; i <= N; i++) {
for (j = ; j <= M; j++) {
read(x);
mat[i][j].val = x;
}
} while (Q--) {
read(A); read(B); read(C); read(D); read(H); read(W);
modify(A,B,C,D,H,W);
} for (i = ; i <= N; i++) {
pos = mat[i][].r;
for (j = ; j <= M; j++) {
write(pos->val);
if (j != M) putchar(' ');
pos = pos -> r;
}
puts("");
} return ;
}

【扬中集训DAY5T1】 交换矩阵的更多相关文章

  1. 【扬中集训DAY2T2】 机智的AmyZhi

    [题目链接] 点击打开链接 [算法] 据说标算是暴力? 从N-200开始搜 不过我用了搜索+一些奇怪的剪枝,也A了.... [代码] 标程 #include<bits/stdc++.h> ...

  2. 【扬中集训 DAY4T3】holiday

    [题目链接] 点击打开链接 [算法] 建C棵线段树即可,注意要用前缀和优化 [代码] 这是标程 #include <bits/stdc++.h> using namespace std; ...

  3. 【扬中集训 DAY4T1】跳马

    [题目链接] 点击打开链接 [算法] 数据范围很大,显然暴力是不能通过的 我们可以先打表,发现答案为 : 41 109 205 325 473 649 853 1085 1345 观察数列的差 68 ...

  4. 【扬中集训DAY1T1】 微信群

    [题目链接] 点击打开链接 [算法] 对问题稍加分析后,发现其实要求的就是 : C(N,K) + C(N,K+1) + C(N,K+2) + ... + C(N,N) 因为N最大10^9,K最大10^ ...

  5. 【扬中集训Day6T1】 白日梦

    [题目描述] 白日梦 (daydream.c/cpp/pas) 时间限制: 1 s  空间限制: 256 MB 题目描述 SR需要相当大的睡眠量 某日,他做了一个奇怪的梦,他梦见自己成为了怪物猎人,为 ...

  6. HDU5671Matrix(矩阵行列交换)

    有一个nn行mm列的矩阵(1 \leq n \leq 1000 ,1 \leq m \leq 1000 )(1≤n≤1000,1≤m≤1000),在这个矩阵上进行qq (1 \leq q \leq 1 ...

  7. DirectX 矩阵

    基础: 下标:第一个下标为该元素所在行的索引,第二个下标为该元素所在列的索引.如下图所示 行向量和列向量:只有单行的向量称为行向量,只有单列的称之为列向量. 相等 维数和元素都相等 数乘(与标量相乘) ...

  8. 线性代数-矩阵-【1】矩阵汇总 C和C++的实现

    矩阵的知识点之多足以写成一本线性代数. 在C++中,我们把矩阵封装成类.. 程序清单: Matrix.h//未完待续 #ifndef _MATRIX_H #define _MATRIX_H #incl ...

  9. 有关CUBLAS中的矩阵乘法函数

    关于cuBLAS库中矩阵乘法相关的函数及其输入输出进行详细讨论. ▶ 涨姿势: ● cuBLAS中能用于运算矩阵乘法的函数有4个,分别是 cublasSgemm(单精度实数).cublasDgemm( ...

随机推荐

  1. HDU - 5584 LCM Walk (数论 GCD)

    A frog has just learned some number theory, and can't wait to show his ability to his girlfriend. No ...

  2. java验证身份证号码是否有效源代码 wn25的头像 wn25 23 2015-01-04 20:09 6 基本信息 Java × 1 浏览

    原文:http://www.open-open.com/code/view/1420373343171 1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 ...

  3. FIREDAC字段类型映射

    为什么需要字段类型映射? 作为通用型数据引擎的FIREDAC或者UNIDAC,驱动某一种数据库以后,总有一些数据库的一些字段类型,数据引擎不能识别,反应到程序中就是数据引擎不能正确地读取该字段的值 . ...

  4. Map与object的区别

    Map 对象保存键值对.任何值(对象或者原始值) 都可以作为一个键或一个值. 语法 new Map([iterable]) 参数 iterable Iterable 可以是一个数组或者其他 itera ...

  5. 【J2EE】十三个规范:愿天下苍生,人人如猿。

    学习了J2ee后对java这个立足标准化的行为感到深深的佩服. 收买什么都不如收买人心,培养啥子都不如培养 习惯.没错,java就是在培养行业习惯,以一纸规范屹立不倒.毕竟技术什么的层出不穷,再新再前 ...

  6. 用df命令显示磁盘使用量和占用率。

    使用“df -k”命令,以k为单位显示磁盘使用量和占用率. root@gsg43:/tmp# df -kFilesystem     1K-blocks    Used Available Use% ...

  7. hadoop优质链接

    http://wiki.apache.org/hadoop/FAQ

  8. 【C#】高级语言特有的单例模式

    public class Singleton { private Singleton () { } // 变量标记为 readonly.第一次引用类的成员或创建实例时,仅仅实例化一次instance对 ...

  9. 用Meta 取消流量器缓存方便调试

    <!-- 禁止浏览器从本地缓存中调阅页面.--> <meta http-equiv="pragram" content="no-cache"& ...

  10. 线程池实例:使用Executors和ThreadPoolExecutor

    线程池负责管理工作线程,包含一个等待执行的任务队列.线程池的任务队列是一个Runnable集合,工作线程负责从任务队列中取出并执行Runnable对象. java.util.concurrent.ex ...