JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点
Description
Input
Output
Sample Input
4 4 2
a a b b
a a b b
c c d d
c c d d
1 1 3 3 2 2
3 1 1 3 2 2
Sample Output
d d c c
d d c c
b b a a
b b a a
Data Constraint
Solution
一道模拟题,但是交换矩阵不能暴力交换——时间不允许。
于是用四向链表维护一个点的四个方向的点是什么,
交换时维护矩阵边缘的点的指针即可。
注意: 读入的字符串长度可能长短不一,开三维数组存会爆内存,用一个 VectorVector 存即可。
Code
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int N=1002;
struct data
{int v,u,d,l,r;
}a[N*N];
int tot;
int f[N][N];
vector<int>s[N*N];
inline int read()
{int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w;
}
int main()
{int n=read(),m=read(),q=read();for(int i=0;i<=n+1;i++){for(int j=0;j<=m+1;j++){f[i][j]=i*(m+2)+j;if(i>=1 && i<=n && j>=1 && j<=m){char ch=getchar();while(!(ch>='a' && ch<='z')) ch=getchar();while(ch>='a' && ch<='z') s[f[i][j]].push_back(ch),ch=getchar();}a[f[i][j]].u=f[i-1][j];a[f[i-1][j]].d=f[i][j];a[f[i][j]].l=f[i][j-1];a[f[i][j-1]].r=f[i][j];a[f[i][j]].v=f[i][j];}}while(q--){int x1=read(),y1=read();int x2=read(),y2=read();int l=read(),c=read();int z1=a[1].d,z2=a[1].d;for(int i=2;i<=x1;i++) z1=a[z1].d;for(int i=2;i<=y1;i++) z1=a[z1].r;for(int i=2;i<=x2;i++) z2=a[z2].d;for(int i=2;i<=y2;i++) z2=a[z2].r;for(int i=0,x=a[z1].l,y=a[z2].l;i<l;i++,x=a[x].d,y=a[y].d) swap(a[x].r,a[y].r);for(int i=0,x=a[z1].u,y=a[z2].u;i<c;i++,x=a[x].r,y=a[y].r) swap(a[x].d,a[y].d);int p=a[z1].l,q=a[z2].l;for(int i=1;i<=c;i++) p=a[p].r,q=a[q].r;for(int i=0;i<l;i++,p=a[p].d,q=a[q].d) swap(a[p].r,a[q].r);p=a[z1].u,q=a[z2].u;for(int i=1;i<=l;i++) p=a[p].d,q=a[q].d;for(int i=0;i<c;i++,p=a[p].r,q=a[q].r) swap(a[p].d,a[q].d);p=z1,q=z2;for(int i=0;i<l;i++,p=a[p].d,q=a[q].d) swap(a[p].l,a[q].l);p=z1,q=z2;for(int i=1;i<=c;i++) p=a[p].r,q=a[q].r;for(int i=0;i<l;i++,p=a[p].d,q=a[q].d) swap(a[p].l,a[q].l);p=z1,q=z2;for(int i=0;i<c;i++,p=a[p].r,q=a[q].r) swap(a[p].u,a[q].u);p=z1,q=z2;for(int i=1;i<=l;i++) p=a[p].d,q=a[q].d;for(int i=0;i<c;i++,p=a[p].r,q=a[q].r) swap(a[p].u,a[q].u);}for(int i=a[1].d,p=1;p<=n;p++,i=a[i].d,putchar('\n'))for(int j=i,q=1;q<=m;q++,j=a[j].r,putchar(' '))for(int k=0;k<s[j].size();k++) putchar(s[j][k]);return 0;
}
JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点相关推荐
- JZOJ5857 【NOIP提高组模拟A组2018.9.8】没有上司的舞会
题目 Description "那么真的有果尔德施坦因这样一个人?"他问道. "是啊,有这样一个人,他还活着.至于在哪里,我就不知道了." "那么那个 ...
- 【二分,找规律】Day 14 提高组模拟C组 T1 小麦亩产一千八
题目大意 给定斐波那契的第aaa项,求出第b" role="presentation">bbb项,默认第0项为1 解题思路 方法一:递推 找到规律后O(b)O(b) ...
- JZOJ 5814. 【NOIP提高A组模拟2018.8.14】 树
梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去, ...
- JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫
Description 信息组最近猫成灾了!隔壁物理组也拿猫没办法.信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数),编号为1 到n,站成了一个环,第i 只猫的左边是第i ...
- 2018.12.08【NOIP提高组】模拟B组总结(未完成)
2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...
- 第一届『Citric杯』NOIP提高组模拟赛 题解
[官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...
- {小结}2016.6.11【初中部 NOIP提高组 】模拟赛C
2016.6.11[初中部 NOIP提高组 ]模拟赛C No.1!!! 100+33.3+10+90=233.3 23333 1298. 牛棚(graze2.pas/c/cpp) 题解 1299. 洗 ...
- 2021.01.14【NOIP提高B组】模拟 总结
2021.01.14[NOIP提高B组]模拟 总结 第一题 Candy 奇奇怪怪的题目. 一开始没有理解题目,其实就是同时变换. 打了一个暴力. 本人随机生成50000组数据,都过了,时间没超.希望出 ...
- 2020.08.08【NOIP提高组】模拟:奶牛的图片 总结
2020.08.08[NOIP提高组]模拟:奶牛的图片 总结 Description Farmer John希望给他的 N ( 1 ≤ N ≤ 100 , 000 ) N(1\leq N\leq100 ...
最新文章
- SourceTree 教程文档(了解界面)
- leetcode 101 Symmetric Tree
- html标记什么规定applet,HTML applet 标签
- 手写java数据库连接池,自定义实现数据库连接池,兼容springboot
- 在JAX-RS中使用@Context [第1部分]
- 深入浅出的webpack4构建工具--webpack4+react构建环境(二十)
- 关于线程的执行顺序,可能真的只是你以为的你以为
- phoenixframework 自动化测试平台 1.4.8 版本发布
- Python计算器练习
- 容器中Bean的生命周期
- dwz 之 IE下 页面加载完了却一直提示数据加载中,请稍等...
- 如何连接到sqlplus
- 什么是CIF/4CIF/QCIF/D1
- aardio匹配问题以及编码问题
- 硬盘安装archlinux
- java Double去掉科学计数E
- 超高性价比——DIY 斯坦福Pupper机器狗
- 俞渝年轻图片_组图:2007中国职场女性榜样-俞渝
- sendgrid html text,用sendgrid发邮件
- MIT又出新玩法,利用AI可轻松分离视频中的乐器声音