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

莆田市C++专项选拔第一轮题3 第二次操作,将 2 号杯子的水全部倒入 1 号杯子,直到 1 号杯子装满水,水量分别为 3, 2。否则,将 2 号杯子的水全部倒入 1 号杯子,直到 1 号杯子装满水或 2 号杯子水为空。一行三个整数 a, b, k,分别表示 1 号杯⼦的容量,2 号杯子的容量和操作次数。请问 k 次操作后,1 号杯子和 2 号杯子中的水量分别是多少?如果 1 号杯子水是满的,则将 1 号杯子中的水全部倒掉。一行两个整数,分别表示 1 号杯子和 2 号杯子中的水量。否则如果 2 号杯子是空的,则将 2 号杯子装满水。 阅读详情

题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;
}
【2024年莆田市第四期C++专项第三轮选拔真题(小学组)】 新排队接水 题解 阅读详情

相关推荐

【2024年莆田市第四期C++专项第三轮选拔真题(初中组) 】买米问题 题解

【2024年莆田市第四期C++专项第三轮选拔真题(初中组) 】买米问题 题解

qq_50807568的博客 1058

2024-莆田市第四批C++ 第一轮选拔赛(代码加解析)

如果没有参加的话也可以知识总结,希望对你有帮助。以下代码和解析都是本人写的,都是100分的,只是非官方答案。

LiXinLong_LXL_13的博客 1737

【2025年莆田市第五期C++专项第三轮选拔真题(小学组)】好日子

【2025年莆田市第五期C++专项第三轮选拔真题(小学组)】特殊合数

qq_50807568的博客 1197

2024-莆田市第四批C++ 第二轮选拔赛(代码加解析)

第二轮比赛结束了,答案又出来了,充实的一天又过去了......

LiXinLong_LXL_13的博客 1353

【2025年莆田市第五期C++专项第三轮选拔真题(初中组)】特殊合数

【2025年莆田市第五期C++专项第三轮选拔真题(初中组)】特殊合数

qq_50807568的博客 1129

【2025年莆田市第五期C++专项第三轮选拔真题(初中组)】风火轮

【2025年莆田市第五期C++专项第三轮选拔真题(初中组)】风火轮

qq_50807568的博客 1023

数组矩阵交换

数组矩阵交换 变换矩阵

2302_80190394的博客 1547

【2025年莆田市第五期C++专项第三轮选拔真题(小学组)】发喜糖

【2025年莆田市第五期C++专项第三轮选拔真题(小学组)】发喜糖

qq_50807568的博客 1227

【2023年莆田市第三期C++专项第二轮选拔真题】T4:种花 题解

【2023年莆田市第三期C++专项第二轮选拔真题】T4:种花 题解

qq_50807568的博客 1959

【2025年莆田市第五期C++专项第三轮选拔真题(初中组)】矩阵转换

【2025年莆田市第五期C++专项第三轮选拔真题(初中组)】矩阵转换

qq_50807568的博客 766

【2025年莆田市第五期C++专项第三轮选拔真题(初中组)】魔法石

【2025年莆田市第五期C++专项第三轮选拔真题(初中组)】魔法石

qq_50807568的博客 1005

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

(年份可能为负,为负表示公元前),需要你来统计哪些年份发生过重要事件,以及每一年发生过多少个事件。每一行输出两个整数,第一个整数表示年份,第二个整数表示此年发生过多少个事件,空格隔开。题目实际是要求统计同一年份事件次数的累加和,并需按年份从小到大排序,自然是桶排序是最合适的。在人类几千年的历史长河中,发生过无数的重要事件,有的影响世界的格局,有的影响人类的命运。对于30%的数据,1 ≤ n ≤ 100,0 ≤ a ≤ 2024,且不存在重复的年份。对于100%的数据,1 ≤ n ≤ 2×10。

lpstudio的博客 848

【2025年莆田市第五期C++专项第三轮选拔真题(小学组)】取糖果

【2025年莆田市第五期C++专项第三轮选拔真题(小学组)】取糖果

qq_50807568的博客 748

【2023年莆田市第三期C++专项第一轮选拔真题】数位积 题解

【2023年莆田市第三期C++专项第一轮选拔真题】数位积 题解

qq_50807568的博客 1850

【2025年莆田市第五期C++专项第三轮选拔真题(小学组)】特殊合数

【2025年莆田市第五期C++专项第三轮选拔真题(小学组)】特殊合数

qq_50807568的博客 973

莆田第四期C++专项选拔第一轮真题解析课件.pptx

莆田第四期C++专项选拔第一轮真题解析课件.pptx T1 光阴似箭 T2 日月如棱 T3 倒水 T4 硬币 包含题目、详细解题思维及多种解题AC代码。 莆田C++专项选拔目的是为贯彻落实《国务院关于印发新一代人工智能发展规划》(国发〔2017〕35号)《莆田市教育局关于印发<莆田市中小学科技创新教育三年行动计划(2023-2025年)>通知》(莆教综〔2023〕20号)要求,在中小学阶段逐步推广编程教育,培养学生的编程思维和创新能力。 以C++编程的基础核心语法为教学内容,带领中小学生走进计算机世界,培养学生的编程思维,提升信息素养,奠定信息学学习基础,为我市中小学信息学储备人才。 全市组织3000名中小学生免费参加培训,进行选拔测试,选拔100名考核优秀的学生作为莆田市信息学奥赛种子选手进行培养。 培训和入围种子选手培训全部免费,不向参加培训的学生收取任何费用。 选拔考核知识点包含: 顺序结构、选择结构、循环结构、数组、函数、结构体等基础知识,排序、枚举算法、贪心算法、动态规划等基础算法。

【2023年莆田市第三期C++专项第二轮选拔真题】T3:粽子 题解

【2023年莆田市第三期C++专项第二轮选拔真题】T3:粽子 题解

qq_50807568的博客 838

PotPlayer终极画质调校:深入MadVR渲染器设置,让你的显示器发挥100%潜力

本文深入探讨了如何通过MadVR渲染器优化PotPlayer的画质设置,充分发挥高端显卡和显示器的潜力。从色彩空间匹配、色深优化到HDR元数据处理,提供了一套完整的配置指南,帮助用户实现影院级视觉体验。特别适合拥有NVIDIA RTX或AMD RX系列显卡的用户进行精细调校。

weixin_42530458的博客 599

【2023年莆田市第三期C++专项第二轮选拔真题】T1:快速反应 题解

【2023年莆田市第三期C++专项第二轮选拔真题】T1:快速反应 题解

qq_50807568的博客 838

从零到一:基于DESeq2的转录组差异表达分析实战指南

本文详细介绍了基于DESeq2的转录组差异表达分析实战指南,涵盖数据准备、标准化处理、差异分析及结果解读等关键步骤。DESeq2凭借其稳定性和对低表达基因的友好处理,成为转录组数据分析的首选工具。文章还提供了常见问题排查和优化建议,帮助研究者高效完成从分析到发表的完整流程。

weixin_26759093的博客 269

【vivado PG学习】1 PG168:7 Series FPGAs Transceivers官方配置方法学习笔记

介绍: The 7 series FPGAs Transceivers Wizard LogiCORE™ IP 自动创建配置7系列fpga 收发器的HDL封装。向导可以配置一个或多个支持行业主流标准的高速串行收发器。或者从零开始支持各种自定义协议。 功能: 创建配置7系列fpga 收发器的HDL封装。 自动对模拟设置进行配置。 预定义了提供Aurora 8B/10B, Aurora 64B/66B, CEI-6G,DisplayPort, Interlaken, Open Base StationAr..

w0shishabi的博客 5万+
上一篇: 莆田市C++专项选拔第二轮题3
下一篇: 【NOIP2006普及组复赛】 题1:明明的随机数
lpstudio
博客等级 码龄16年 1266粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lpstudio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值