Working routine CodeForces - 706E (链表)
大意: 给定矩阵, q个操作, 每次选两个子矩阵交换, 最后输出交换后的矩阵
双向十字链表模拟就行了
const int N = 1500;
int n, m, q;
struct _ {
int v,l,r,u,d;
} f[N*N];
int ans[N][N];
int has(int i,int j) {return 1010*(i+2)+(j+2);}
int get(int i,int j) {
int r = f[has(0,j)].d;
REP(k,1,i-1) r=f[r].d;
return r;
} void pr() {
REP(j,1,m) {
int x = get(1,j);
REP(i,1,n) ans[i][j]=f[x].v,x=f[x].d;
}
REP(i,1,n) {
REP(j,1,m) printf("%d ", ans[i][j]);hr;
}
} int main() {
scanf("%d%d%d", &n, &m, &q);
REP(i,1,n) REP(j,1,m) {
_ &t = f[has(i,j)];
scanf("%d", &t.v);
t.l=has(i,j-1);
t.r=has(i,j+1);
t.u=has(i-1,j);
t.d=has(i+1,j);
}
REP(i,1,m) {
f[has(0,i)].d=has(1,i);
f[has(n+1,i)].u=has(n,i);
}
REP(i,1,n) {
f[has(i,m+1)].l=has(i,m);
f[has(i,0)].r=has(i,1);
}
REP(i,1,q) {
int a, b, c, d, h, w;
scanf("%d%d%d%d%d%d", &a, &b, &c, &d, &h, &w);
int x = get(a,b), y = get(c,d);
REP(i,1,w) {
swap(f[f[x].u].d,f[f[y].u].d);
swap(f[x].u,f[y].u);
if (i!=w) x = f[x].r, y = f[y].r;
}
REP(i,1,h) {
swap(f[f[x].r].l,f[f[y].r].l);
swap(f[x].r,f[y].r);
if (i!=h) x = f[x].d, y = f[y].d;
}
REP(i,1,w) {
swap(f[f[x].d].u,f[f[y].d].u);
swap(f[x].d,f[y].d);
if (i!=w) x = f[x].l, y = f[y].l;
}
REP(i,1,h) {
swap(f[f[x].l].r,f[f[y].l].r);
swap(f[x].l,f[y].l);
x = f[x].u, y = f[y].u;
}
}
pr();
}
Working routine CodeForces - 706E (链表)的更多相关文章
- 【链表】【模拟】Codeforces 706E Working routine
题目链接: http://codeforces.com/problemset/problem/706/E 题目大意: 给一个N*M的矩阵,Q个操作,每次把两个同样大小的子矩阵交换,子矩阵左上角坐标分别 ...
- CodeForces 706E Working routine
十字链表. 开一个十字链表,矩阵中每一格作为一个节点,记录五个量: $s[i].L$:$i$节点左边的节点编号 $s[i].R$:$i$节点右边的节点编号 $s[i].U$:$i$节点上面的节点编号 ...
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem C (Codeforces 828C) - 链表 - 并查集
Ivan had string s consisting of small English letters. However, his friend Julia decided to make fun ...
- 【CodeForces706E】Working routine(二维链表)
BUPT2017 wintertraining(15) #6B 题意 q次操作,每次把两个给定子矩阵交换,求最后的矩阵.(2 ≤ n, m ≤ 1000, 1 ≤ q ≤ 10 000) 题解 用R[ ...
- Codeforces Round #367 (Div. 2) 套题
吐槽:只能说是上分好场,可惜没打,唉 A:Beru-taxi (水题,取最小值) #include <cstdio> #include <cstring> #include & ...
- Magolor的数据结构作业
\(CodeForces 706E ~Working routine\) 给出一个矩阵,每次操作交换两个子矩阵,求最后状态. 使用链表存储,每次交换后,影响到的之后矩阵边缘的指针,暴力修改. \(~~ ...
- 十字链表 Codeforces Round #367 E Working routine
// 十字链表 Codeforces Round #367 E Working routine // 题意:给你一个矩阵,q次询问,每次交换两个子矩阵,问最后的矩阵 // 思路:暴力肯定不行.我们可以 ...
- [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 ...
- Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor (链表)
题目链接:http://codeforces.com/contest/670/problem/E 给你n长度的括号字符,m个操作,光标初始位置是p,'D'操作表示删除当前光标所在的字符对应的括号字符以 ...
随机推荐
- Ignite初探
Guava是一个很方便的本地缓存工具,但是在多节点处理的过程中,本地缓存无法满足数据一致性的问题.分布式缓存Ignite很好的解决了数据一致性,可靠性,事务性等方面的问题. Ignite支持分区方式和 ...
- linux常用命令:lsof 命令
lsof(list open files) 是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以 如传输控制 ...
- netty4----日志框架的检查
https://segmentfault.com/a/1190000005797595 2016年06月25日 · 4.1k 次阅读 Netty4.x Internal Logger机制 nett ...
- Qt学习之路(45): 自定义model之一
前面我们说了Qt提供的几个预定义model.但是,面对变化万千的需求,那几个model是远远不能满足我们的需要的.另外,对于Qt这种框架来说,model的选择首先要能满足绝大多数功能的需要,这就是说, ...
- WireShark学习
1.打开wireshark->Capture->Interface->选择你的网卡(选中)->Start 2.OK抓包开始,工具栏上有stop,点击停止抓包 3.过滤,这个你可 ...
- (二)github的价值意义篇
为什么需要社会化编程? 如果您是程序员面试官,两者之间你会选择哪一位呢? 能查看以前所写代码的程序员 or 无法查看的程序员 精通最新软件的程序员 or 不精通的程序员 对语言或软件差异带来的不同文化 ...
- ES6学习--对象属性的可枚举性( enumerable)
可枚举性(enumerable)用来控制所描述的属性,是否将被包括在for...in循环之中.具体来说,如果一个属性的enumerable为false,下面三个操作不会取到该属性.* for..in循 ...
- 轻量级文本标记语言-Markdown
Markdown简介 接触过github的都知道,在发布项目的时候可以建立一个说明文件README.md,这个md文件就是Markdown文本编辑语言的文件. Markdown 是一种轻量级标记语言, ...
- 09: python基础补充
1.1 闭包 1.闭包概念 1. 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用,这样就构成了一个闭包 2. 一般情况下,在我们认知当中,如果一个函数 ...
- CF#235E. Number Challenge
传送门 可以理解为上一道题的扩展板.. 然后我们就可以YY出这样一个式子 ${\sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^cd(ijk)=\sum_{i=1}^a\sum_{ ...