莆田市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函数所得到的矩阵图案刚好是相反的顺序;
因此,可以先将四种矩阵模拟出来存储起来,然后根据输入的情况直接读取对应的图案即可。
**
代码如下:
#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;
}
相关文章:

莆田市C++专项选拔第二轮题4
题4:变换阵型 【题目描述】 盛隆同学刚学完C的二维数组和函数部分,于是他自己写了2个函数对二维数组进行练习。两个函数如下: int n, a[1005][1005]; // 注意,这里的n和数组a是全局变量 void f1() {for (int i 1; i < n; i)…...
AtCoder Regular Contest 177
A - Excange 题意 用这些零钱能否不找零地买这些物品 思路 因为 500 5 100 10 50 50 10 500 1 5005\times 10010\times 5050\times 10500\times 1 5005100105050105001。 所以说,我们这道题可以采用贪心算法,优先取大的减去目前零钱最大的…...

【C++】 C++ 编写 鸡兔同笼程序
文章目录 “鸡兔同笼”问题是一个经典的数学问题,要求根据总头数和总腿数来计算鸡和兔的数量。假设鸡有 2 条腿,兔有 4 条腿。可以通过以下步骤求解这个问题: 1 .设鸡的数量为 x,兔的数量为 y。2.根据题意,我们有以下…...

[动画详解]LeetCode151.翻转字符串里的单词
💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到动画详解LeetCode算法系列 用通俗易懂的动画让算法题不再神秘 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成…...

如何使用 ArcGIS Pro 制作地震动画
在做某些汇报的时候,除了图文,如果有动画肯定会成为加分项,这里为大家介绍一下如何使用 ArcGIS Pro 制作地震动画,希望能对你有所帮助。 添加时间 在图层属性内,选择时间选项卡,图层时间选择每个要素具有…...
Unity 初步了解
1.Unity 是啥 Unity是一个实时3D互动内容创作和运营平台。它可以帮助游戏开发、美术、建筑、汽车设计、影视等行业的创作者将创意变为现实。Unity平台提供了一套完善的软件解决方案,用于创作、运营和变现任何实时互动的2D和3D内容,支持的平台包括手机、…...

爬虫学习(4)每日一笑
代码 import requests import re import osif __name__ "__main__":if not os.path.exists("./haha"):os.makedirs(./haha)url https://mlol.qt.qq.com/go/mlol_news/varcache_article?docid6321992422382570537&gameid3&zoneplat&webview…...
生产环境节点扩容方案
datanode节点扩缩容(1人天) 注意:新增节点需要走商务,节点扩容需要申请新的license 制品包下载 #内网下载(环境检查脚本) wget --user=admin --password=Y!bC2hx0TN@21cal http://10.69.71.180:8082/artifactory/product/qiudongyang/precheck/os-check20221127.tar…...
Spring线程池配置
配置Spring线程池,特别是ThreadPoolTaskExecutor,通常涉及设置一些关键参数以控制线程池的行为和性能。以下是一些基本的配置步骤: 定义配置类 首先,需要创建一个配置类,使用@Configuration注解标记,并启用异步执行功能,使用@EnableAsync注解。 @Configuration @Enab…...
Unity学习笔记---物理引擎
RigidBody 刚体 1,Gravity Scale 重力参数,是一个乘量参数,调整为0则不受重力影响。 2,Sleeping Mode 睡眠模式,分为永不睡眠/开始时睡眠/开始时不睡眠3种。如需要一直碰撞检测可以选择永不睡眠。 BoxCollider 碰撞…...
Vue与Java使用AES加密与解密
CBC模式(通过偏移值进行加密,更具安全性) 一、VUE: 1、安装 npm install crypto-js 2、编写公用js(在common文件夹下创建一个crypto.js) 注意:key最少要有16个字符,iv最少6个字符…...

B/S版+java开发的医院绩效考核系统maven+Visual Studio Code 医院绩效考核管理系统 提升医疗服务质量的关键
B/S版java开发的医院绩效考核系统mavenVisual Studio Code 医院绩效考核管理系统 提升医疗服务质量的关键 医院绩效评价系统的建设,优化医院绩效管理体系,规范化工作目标的设计、沟通、评价与反馈,改进和提供医院管理人员的管理能力和成效&am…...

汇昌联信科技:拼多多电商的运营流程有哪些?
在当今互联网高速发展的时代,电商平台层出不穷,其中拼多多以其独特的团购模式和低价策略迅速崛起,成为众多消费者和商家的新宠。那么,拼多多电商的运营流程究竟包含哪些环节呢?接下来,我们将从商品上架、营销推广、订…...

AI大模型探索之路-训练篇20:大语言模型预训练-常见微调技术对比
系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…...
现代 c++ 一:c++11 ~ c++23 新特性汇总
所谓现代 c,指的是从 c11 开始的 c,从 c11 开始,加入一些比较现代的语言特性和改进了的库实现,使得用 c 开发少了很多心智负担,程序也更加健壮,“看起来像一门新语言”。 从 c11 开始,每 3 年发…...

【c++】全面理解C++多态:虚函数表深度剖析与实践应用
🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,通过本篇文章,来详细理解多态的内容 目录 1.多态的定义及实现1.1多态的构成条件1.2虚函数的重写1.3 C11 override 和 final1.4重载、覆盖(重写)、隐藏…...

分享四种免费获取SSL的方式
SSL证书目前需要部署安装的网站很多,主要还是基于国内目前对证书的需求度在不断的升高,网站多了、服务器多了之后。网络安全问题就成为了大家不得不面对的一个重要的问题了。SSL证书的作用有很多,这里就不一一详述了,本期作品主要…...
2024.5.14晚训题解
非线性结构没懂的同学多去看看课程回放。 A题Overall Winner 题解 很基础的题目,输入字符串,用计数器去统计一下就好了。 因为赢的次数一样的时候优先判断前面的那个人赢,所以说两个人赢的次数相同的时候我们不必 去记录胜者。 #include<…...
jQuery的选择器与自带函数详解
在前端开发中,jQuery是一个广泛使用的JavaScript库,它极大地简化了HTML文档遍历、事件处理、动画以及AJAX交互等操作。本文将通过一个示例页面,详细介绍jQuery的选择器和一些常用的自带函数。 示例代码优化 首先,我们来优化和完…...
Next.js与SSR:构建高性能服务器渲染应用
1. 创建项目 通过create-next-app脚手架创建一个新的Next.js项目: npx create-next-app my-app cd my-app2. 自动SSR 在Next.js中,每个.js或.jsx文件的组件都会被自动处理为SSR页面。例如,创建一个pages/index.js文件: // pag…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...