题目

给出一个 \(n*m\) 的矩阵,每次交换两个等大的矩阵,输出 \(q\) 次操作后的矩阵


分析

维护向右和向下的指针,考虑最后输出只需要从每行的头指针向右跳,

那么修改实际上是将矩阵左边一列、上面一行、最后一行和最后一列向右下指针交换

时间复杂度 \(O((n+m)Q)\)


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
using namespace std;
const int N=1048576;
int n,m,Q,you[N],xia[N],a[N],rk[1011][1011];
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
int main(){
n=iut(),m=iut(),Q=iut();
for (int i=0;i<n+2;++i)
for (int j=0;j<m+2;++j) rk[i][j]=i*(m+2)+j;
for (int i=0;i<n+2;++i)
for (int j=0;j<m+1;++j) you[rk[i][j]]=rk[i][j+1];
for (int i=0;i<n+1;++i)
for (int j=0;j<m+2;++j) xia[rk[i][j]]=rk[i+1][j];
for (int i=1;i<=n;++i)
for (int j=1;j<=m;++j) a[rk[i][j]]=iut();
for (int T=1;T<=Q;++T){
int px=iut(),py=iut(),qx=iut(),qy=iut(),xl=iut(),yl=iut();
int tp=rk[px-1][0],tq=rk[qx-1][0];
for (int i=1;i<py;++i) tp=you[tp];
for (int i=1;i<qy;++i) tq=you[tq];
for (int Tp=tp,Tq=tq,i=0;i<xl+yl;++i)
if (i<xl){
Tp=xia[Tp],Tq=xia[Tq];
swap(you[Tp],you[Tq]);
}else{
Tp=you[Tp],Tq=you[Tq];
swap(xia[Tp],xia[Tq]);
}
for (int Tp=tp,Tq=tq,i=0;i<xl+yl;++i)
if (i>=yl){
Tp=xia[Tp],Tq=xia[Tq];
swap(you[Tp],you[Tq]);
}else{
Tp=you[Tp],Tq=you[Tq];
swap(xia[Tp],xia[Tq]);
}
}
for (int i=1;i<=n;++i){
int t=you[rk[i][0]];
for (;t!=rk[i][m+1];t=you[t]) print(a[t]),putchar(32);
putchar(10);
}
return 0;
}

#链表#CF706E Working routine的更多相关文章

  1. 十字链表 Codeforces Round #367 E Working routine

    // 十字链表 Codeforces Round #367 E Working routine // 题意:给你一个矩阵,q次询问,每次交换两个子矩阵,问最后的矩阵 // 思路:暴力肯定不行.我们可以 ...

  2. 【链表】【模拟】Codeforces 706E Working routine

    题目链接: http://codeforces.com/problemset/problem/706/E 题目大意: 给一个N*M的矩阵,Q个操作,每次把两个同样大小的子矩阵交换,子矩阵左上角坐标分别 ...

  3. Working routine CodeForces - 706E (链表)

    大意: 给定矩阵, q个操作, 每次选两个子矩阵交换, 最后输出交换后的矩阵 双向十字链表模拟就行了 const int N = 1500; int n, m, q; struct _ { int v ...

  4. 【CodeForces706E】Working routine(二维链表)

    BUPT2017 wintertraining(15) #6B 题意 q次操作,每次把两个给定子矩阵交换,求最后的矩阵.(2 ≤ n, m ≤ 1000, 1 ≤ q ≤ 10 000) 题解 用R[ ...

  5. [cf div 2 706E] Working routine

    [cf div 2 706E] Working routine Vasiliy finally got to work, where there is a huge amount of tasks w ...

  6. Redis链表实现

    链表在 Redis 中的应用非常广泛, 比如列表键的底层实现之一就是链表: 当一个列表键包含了数量比较多的元素, 又或者列表中包含的元素都是比较长的字符串时, Redis 就会使用链表作为列表键的底层 ...

  7. [数据结构]——链表(list)、队列(queue)和栈(stack)

    在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...

  8. 排序算法----基数排序(RadixSort(L))单链表智能版本

    转载http://blog.csdn.net/Shayabean_/article/details/44885917博客 先说说基数排序的思想: 基数排序是非比较型的排序算法,其原理是将整数按位数切割 ...

  9. 防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结

    防御性编程习惯 程序员在编写代码的时候,预料有可能出现问题的地方或者点,然后为这些隐患提前制定预防方案或者措施,比如数据库发生异常之后的回滚,打开某些资源之前,判断图片是否存在,网络断开之后的重连次数 ...

  10. 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法

    有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...

随机推荐

  1. gunzip命令

    解压提取文件内容 语法格式:gunzip 参数 压缩包 常用参数 -a 使用ASCII文本模式 -q 静默执行模式 -c 将解压后的文件输出到标准输出设备 -r 递归处理所有子文件 -f 强制解压文件 ...

  2. __init_subclass__特殊方法

    __init_subclass__ 是 Python 3.6 引入的一个特殊方法,用于在子类被定义时执行一些操作. 这个方法允许你在父类中定义一个类方法,当子类继承父类时会自动调用这个方法,你可以在其 ...

  3. dd命令创建文件

    dd if=... of=... bs=... count=... if表示输入文件,of表示输出文件,bs默认指定了以字节为单位的块大小(单位有字节c,字w,块B,千字节m,兆字节m,吉字节G),c ...

  4. 基于kubeadm部署k8s1.80.0

    k8s搭建 硬件要求 测试环境 # master 2核 4G 20G # node 4核 8G 40G 生产环境 # master 8核 16G 100G # node 16核 64G 500G 方式 ...

  5. 如何在矩池云使用 Poetry 管理项目环境

    官网介绍:Poetry is a tool for dependency management and packaging in Python. It allows you to declare th ...

  6. 有了这份Java面试中的葵花宝典,让你面试起飞!!!

    HashMap面试题 HashMap与HashTable的区别 1.HashMap线程不安全 HashTable 线程是安全的采用synchronized 2.HashMap允许存放key 为null ...

  7. 【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn

    问题描述 App Service 配置 Application Settings 访问Storage Account.如下: { "name": "WEBSITE_CON ...

  8. STM32FATFS文件系统移植

    STM32FATFS文件系统移植 1. FATFS简介 FATFS文件系统是一个用于在微控制器上运行的开源文件系统,支持FAT/FATFS.NTFS.exFAT等主流文件系统,且一直保持更新.在此以F ...

  9. 主流开源分布式图计算框架 Benchmark

    本文由美团 NLP 团队高辰.赵登昌撰写,首发于 Nebula Graph Community 公众号 前言 随着近年来数据的爆炸式增长,如何高效地分析处理数据,在业界一直备受关注.现实世界中的数据往 ...

  10. 计算机网络-IP地址

    目录 子网划分 定长子网划分 子网划分的方法 子网掩码 可变长子网划分 无类别编址 网络前缀 路由聚合 特殊用途的IP地址 专用网络地址 链路本地地址 运营商级NAT共享地址 用于文档的测试网络地址 ...