莆田市C++专项选拔第二轮题4

题4:变换阵型

【题目描述】
盛隆同学刚学完C++的二维数组和函数部分,于是他自己写了2个函数对二维数组进行练习。两个函数如下:

int n, a[1005][1005];	// 注意,这里的n和数组a是全局变量
void f1() {for (int i = 1; i <= n; i++) {for (int j = 1; j <= i; j++) {int t = a[i][j];a[i][j] = a[j][i];a[j][i] = t;}}
}
void f2() {for (int i = 1; i <= n; i++) {for (int j = 1; j <= n - i + 1; j++) {int t = a[i][j];a[i][j] = a[n-j+1][n-i+1];a[n-j+1][n-i+1] = t;}}
}

现给出一个 n x n 的矩阵 a,矩阵的行列下标均从 1 开始,也就是说矩阵中的第 i 行第 j 列的元素保存在 a[i][j] 中。
现在盛隆同学想要对矩阵 a 进行 Q 次操作,操作共有三种,参数分别如下:

  • 1:调用函数 f1。
  • 2:调用函数 f2。
  • 3 x y:输出矩阵 a 目前第 x 行第 y 列的元素。

【输入】
第一行两个整数 n,Q,表示矩阵的大小和操作的次数。
接下来 n 行,每行 n 个整数,表示矩阵 a。
接下来 Q 行,每行一个操作,操作格式如题目描述。
【输出】
对于每个操作 3 x y,输出一行一个整数,表示矩阵 a 目前第 x 行第 y 列的元素。
【输入样例1】

3 3
1 2 3
4 5 6
7 8 9
1
2
3 1 2

【输出样例1】

8

样例解释
原矩阵经过 n 次操作后的矩阵如下:
9 8 7
6 5 4
3 2 1
所以 a[1][2]=8 。
【输入样例2】

4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
1
3 1 2
2
3 2 3

【输出样例2】

5
10

【数据规模及约定】
对于20%的数据,没有操作一和操作二,只有操作三。
对于50%的数据,1 ≤ n ≤ 500 , 1 ≤ Q ≤ 100。
对于100%的数据,1 ≤ n ≤ 1000 , 1 ≤ Q ≤ 10000 , 0 ≤ a 𝑖𝑗 ≤ 109, , 1 ≤ x,y ≤n。

题目解析:

**根据题意,当读取到1或2后,分别会调用f1或f2函数后,矩阵将发生变化,页读取到3时,只需要输出当前矩阵状态下对应位置的值即可,所以重点要分析调用函数后矩阵的变化情况,如果直接用暴力必然拿不到满分,会超时。可以试着模拟一个6x6的矩阵,调用f1和f2函数让矩阵变化,可以将每一种矩阵当作一种图案,在当前矩阵图案下,有两条途径,可以调用f1函数或f2函数,可列出图表(如下图),发现如下规律:
1、如果连续调用同一函数,矩阵的会在两种图案中来回切换;
2、f1、f2交叉调用,各调用一次后会得到相同图案,反复交叉调用后发现只有四种图案,并且最先调用f1函数与最先调用f2函数所得到的矩阵图案刚好是相反的顺序;
因此,可以先将四种矩阵模拟出来存储起来,然后根据输入的情况直接读取对应的图案即可。

模拟第1次先调用f1函数
模拟第1次先调用f2函数

**

代码如下:

#include <bits/stdc++.h>
using namespace std;
int n,Q, a[1005][1005],m,aa[5][1005][1005],x1,x2;
void f1() {for (int i = 1; i <= n; i++) {for (int j = 1; j <= i; j++) {int t = a[i][j];a[i][j] = a[j][i];a[j][i] = t;}}
}
void f2() {for (int i = 1; i <= n; i++) {for (int j = 1; j <= n - i + 1; j++) {int t = a[i][j];a[i][j] = a[n - j + 1][n - i + 1];a[n - j + 1][n - i + 1] = t;}}
}int main() {cin >> n >> Q;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++) cin >> a[i][j];int x, y;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)aa[0][i][j]=a[i][j];f1();for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)aa[1][i][j]=a[i][j];f2();for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)aa[3][i][j]=a[i][j];f1();for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)aa[2][i][j]=a[i][j];for (int k = 1; k <= Q; k++){cin >> m;if(m==1)x1=1-x1;else if(m==2)x2=2-x2;else {cin>>x>>y;cout<<aa[x1+x2][x][y]<<"\n";}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/701406.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker下载镜像出现“missing signature key”如何解决?

“missing signature key” 通常与 Docker 配置有关&#xff0c;具体是 Docker 试图验证镜像的签名但未能找到相应的密钥。这种情况可能发生在启用了 Docker Content Trust (DCT) 的环境中&#xff0c;DCT 是一种安全功能&#xff0c;要求所有镜像必须有签名才能拉取。 原因 …

【Flutter】极光推送配置流程(VIVO/OPPO/荣耀厂商通道) 章三

相关文章 推送配置共三篇(如下链接) 【Flutter】极光推送配置流程(极光通道/华为厂商/IOS) 章一 【Flutter】极光推送配置流程(小米厂商通道) 章二 【Flutter】极光推送配置流程(VIVO/OPPO/荣耀厂商通道) 章三 前言 很高兴大家来看小编写的文章&#xff5e;&#xff5e; 继【…

Python爬虫——如何使用urllib的HTTP基本库

怎样通过 urllib库 发送 HTTP 请求&#xff1f; urllib库主要由四个模块组成: urllib.request 打开和读取 URLurllib.error 包含 urllib.request 抛出的异常urllib.parse 用于解析 URLurllib.robotparser 用于解析 robots.txt 文件 1. 使用urllib.parse解析URL 使用urlparse(…

centos7.9安装PHP运行环境

MySQL安装 报错&#xff1a;源 "MySQL 8.0 Community Server" 的 GPG 密钥已安装&#xff0c;但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。 解决&#xff1a; yum install mysql-server -y --nogpgcheck 查询初始密码 grep temporary password /var…

数据中心网络随想-电路交换

数据中心网络扩容并不容易&#xff0c;涉及设备上架&#xff0c;切换等又硬又大的动作&#xff0c;期间对所有应用都会产生影响&#xff0c;所以理论上 “加钱加硬件” 这种看起来很简单的事实际上真不如 “写一个随时部署升级的端到端拥塞控制算法” 更容易实施。 傍晚绕小区…

警惕!红火蚁危机升级:已入侵我国12省份,扩散速度惊人

近年来&#xff0c;红火蚁这一外来入侵物种在我国呈现出了令人担忧的扩张态势&#xff0c;其危害性和扩散速度之迅猛&#xff0c;已引起了社会各界的广泛关注和政府部门的高度警惕。红火蚁作为一种极具破坏力的生物&#xff0c;不仅会对当地的生态环境造成巨大影响&#xff0c;…

【算法】二分查找——二分查找

本节博客详述“二分查找”并且以例子来进行讨论&#xff0c;有需要借鉴即可。 目录 1.二分查找1.1使用前提1.2模板 2.题目3.题解代码示例4.二分查找的一般模板5.总结 1.二分查找 1.1使用前提 使用的条件&#xff1a;数组具有“二段性”&#xff0c;二段性指的是数组可以根据某…

如何将公众号添加到CSDN个人主页

1. 创作中心- 推广管理 输入个人公众号名字并开启微信公众号推广 2. 将公众号的二维码图片加入拓展信息 个人主页的左下角就能看到推广 如果希望能看到是二维码 操作如下&#xff1a; 写篇文章贴上二维码 然后点击鼠标右键获得此页面链接 &#xff0c;例如我的个人公众号 htt…

MyBatis的注解实现复杂映射开发

xml 配置方式实现复杂映射回顾 ​ 实现复杂映射我们之前可以在映射文件中通过配置来实现&#xff0c;使用注解开发后&#xff0c;我们可以通过 Results 注解&#xff0c;Result 注解&#xff0c;One 注解和 Many 注解组合完成复杂关系的配置。 注解说明Results代替的是标签 …

举个栗子!Tableau 技巧(273):用葡萄干布丁图(Plum Pudding Chart)查看数据

葡萄干布丁图 / Plum Pudding Chart 葡萄干布丁图&#xff08;Plum Pudding Chart&#xff09;源自英国传统的葡萄干布丁&#xff0c;它由多种原料混合而成&#xff0c;每种原料的比例不同&#xff0c;葡萄干布丁图用于展示多种不同类型的数据。 葡萄干布丁图由一系列同心圆环…

mysql的隔离性——MVCC

MVCC通过undolog版本链和readview来实现 更新和删除时会写入undolog中。 读已提交&#xff1a;在事务任意读时创建readview&#xff0c;读最新提交的事务 可重复读&#xff1a;在事务第一次读时创建readview

电力物联网-(2)系统设计

电力物联网系统设计 前言 在此之前写过《电力物联网系统设计》开篇文章&#xff0c;上一篇文章主要的概述性的内容&#xff0c;发表之后总觉得对电力物联网系统设计这一方面还只是开了一个头&#xff0c;没有把相关的内容讲解清楚&#xff0c;于是经过一段时间的构思终于产出了…