当前位置: 首页 > news >正文

【算法】dd爱转转

✨题目链接:

dd爱旋转


✨题目描述 

读入一个n∗n的矩阵,对于一个矩阵有以下两种操作
1:顺时针旋180°
2:关于行镜像

\begin{bmatrix} 1&2 \\ 3& 4 \end{bmatrix}变成\begin{bmatrix} 3 &4 \\ 1& 2 \end{bmatrix}

给出q个操作,输出操作完的矩阵

✨输入描述:

第一行一个数n(1≤n≤1000),表示矩阵大小
接下来n行,每行n个数,描述矩阵,其中数字范围为[1,2000]
一下来一行一个数q(1≤q≤100000),表示询问次数
接下来q行,每行一个数x(x=1或x=2),描述每次询问 

✨输出描述:

n行,每行n个数,描述操作后的矩阵

✨示例1


📍输入

2
1 2
3 4
1

📍输出

4 3
2 1 

✨示例2

📍输入

2
1 2
3 4
1

📍输出

3 4
1 2 

✨解题思路

  • 我们先分析两种操作
  1. 顺时针旋180°我们发现选转一次只需要从i=0向后遍历到\frac{n*n}{2}位置每次交换矩阵的[x][y]与[n-1-x][n-1-y]的值就可以实现一次旋转,从 i 到\frac{n*n}{2} 当前行可以用 i/n 得到 当前列可以用 i%n 得到。
  2. 关于行镜像我们遍历行的一半,每次与n-i行交换一整行即可得到行镜像
  • 我们发现两种操作,如果连续操作 两次矩阵会恢复为原来的样子
  • 所以先整理输入的操作数数据
  • 通过栈来把连续的两个操作数进行消除
  • 遍历栈的元素进行两种操作
  • 最后打印矩阵

✨代码
 

#include <iostream>
#include <vector>
#include <stack>
using namespace std;void operate1(vector<vector<int>>& v) {int n = v.size();for (int i = 0; i < n * n / 2; i++) {//行 i/v.size() 列 i%v.size()int x = i / v.size();int y = i % v.size();int tmp = v[x][y];v[x][y] = v[n - 1 - x][n - 1 - y];v[n - 1 - x][n - 1 - y] = tmp;}
}void operate2(vector<vector<int>>& v) {int x = v.size();for (int i = 0; i < x / 2; i++) {v[i].swap(v[x - i - 1]);}
}int main() {int n;cin >> n;vector<vector<int>> v(n, vector<int>(n));for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cin >> v[i][j];}}int q, tmp;stack<int> st;cin >> q;while (q--) {cin >> tmp;if (!st.empty()) {if (tmp == st.top()) {st.pop();} else {st.push(tmp);}} else {st.push(tmp);}}while (!st.empty()) {if (st.top() == 1)operate1(v);else operate2(v);st.pop();}for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cout << v[i][j] << " ";}cout << endl;}return 0;
}


※ 如果文章对你有帮助的话,可以点赞收藏!!谢谢支持

相关文章:

【算法】dd爱转转

✨题目链接&#xff1a; dd爱旋转 ✨题目描述 读入一个n∗n的矩阵&#xff0c;对于一个矩阵有以下两种操作 1:顺时针旋180 2:关于行镜像 如 变成 给出q个操作&#xff0c;输出操作完的矩阵 ✨输入描述: 第一行一个数n(1≤n≤1000)&#xff0c;表示矩阵大小 接下来n行&#xff…...

Python3 笔记:IDLE的几个基本设置

1、设置字体&#xff1a; Options > Configure IDLE > Fonts 2、设置文字颜色&#xff08;设置高亮&#xff09;&#xff1a; Options > Configure IDLE > Highlights 3、设置背景颜色&#xff1a; Options > Configure IDLE > Highlights 4、设置窗口&a…...

Mysql:存储过程练习

create table stu( id int(3) primary key auto_increment, name varchar(20) not null, grade float, gender char(2)); insert into stu(name,grade,gender) values(tom,60,男),(jack,70,男),(rose,90,女),(lucy,100,…...

详解Java ThreadLocal

个人博客 详解Java ThreadLocal | iwts’s blog Java ThreadLocal ThreadLocal提供了线程内存储变量的能力&#xff0c;这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。通过get和set方法就可以得到当前线程对应的值。 TreadLocal存储模型 ThreadLocal的静态…...

Unable to parse response body for Response{requestLine=PUT

1 异常信息&#xff1a; Caused by: java.lang.RuntimeException: Unable to parse response body for Response{requestLinePUT /an_path_statistic_log/_doc/11?timeout1m HTTP/1.1, hosthttp://192.168.3.60:9200, responseHTTP/1.1 200 OK}at org.springframework.data.e…...

GitHub的原理及应用详解(六)

本系列文章简介&#xff1a; GitHub是一个基于Git版本控制系统的代码托管平台&#xff0c;为开发者提供了一个方便的协作和版本管理的工具。它广泛应用于软件开发项目中&#xff0c;包括但不限于代码托管、协作开发、版本控制、错误追踪、持续集成等方面。 GitHub的原理可以简单…...

基于PHP+MySQL组合开发的微信小程序分销商城源码系统 分销商城+积分商城+多商户 功能强大 带完整的安装代码包以及搭建教程

系统概述 在当今数字化商业时代&#xff0c;拥有一个强大而多功能的分销商城系统对于企业的发展至关重要。本文将重点介绍基于 PHPMySQL 组合开发的微信小程序分销商城源码系统&#xff0c;它融合了分销商城、积分商城和多商户等功能&#xff0c;不仅功能强大&#xff0c;还提…...

kafka-消费者组偏移量重置

文章目录 1、消费者组偏移量重置1.1、列出所有的消费者组1.2、查看 my_group1 组的详细信息1.3、获取 kafka-consumer-groups.sh 的帮助信息1.4、 偏移量重置1.5、再次查看 my_group1 组的详细信息 1、消费者组偏移量重置 1.1、列出所有的消费者组 [rootlocalhost ~]# kafka-…...

一书读懂Python全栈安全,剑指网络空间安全

写在前面 通过阅读《Python全栈安全/网络空间安全丛书》&#xff0c;您将能够全面而深入地理解Python全栈安全的广阔领域&#xff0c;从基础概念到高级应用无一遗漏。本书不仅详细解析了Python在网络安全、后端开发、数据分析及自动化等全栈领域的安全实践&#xff0c;还紧密贴…...

原生js实现拖拽改变元素顺序

代码展示如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…...

以果决其行,只为文化的传承

从他们每一个人的身上&#xff0c;我们看到传神的东西&#xff0c;就是他们都能用结果&#xff0c;去指引自己前进的方向&#xff0c;这正是我要解读倪海厦老师的原因&#xff0c;看倪海厦2012年已经去世&#xff0c;到现在已经十几年时间了&#xff0c;但是我们看现在自学中医…...

Flutter 中的 SizedOverflowBox 小部件:全面指南

Flutter 中的 SizedOverflowBox 小部件&#xff1a;全面指南 在 Flutter 的布局世界中&#xff0c;SizedOverflowBox 是一个相对独特的小部件&#xff0c;它允许子组件溢出其父组件的界限&#xff0c;同时保持父组件的尺寸不变。这在某些特定的布局场景下非常有用&#xff0c;…...

图像视频智能抹除修复解决方案,适应性强,应用广泛

行车录制、现场拍摄等过程中&#xff0c;往往会出现一些难以避免的瑕疵——遮挡物、无关人员、甚至是意外的光线变化&#xff0c;这些都可能影响到视频与图像的质量&#xff0c;降低其观赏性和专业性。 美摄科技&#xff0c;作为行业领先的图像视频智能处理专家&#xff0c;深…...

20240521(代码整洁和测试入门学习)

测试: 1.测试工程师、测试工具开发工程师、自动化测试工程师。 python&#xff1a; 1、发展背景和优势&#xff1b; 2、开始多需的工具 interpreter(解释器) refactor(重构) 2、变量和注释的基础语法 3、输入输出 i 1 for i in range(1, 11): print(i, end ) 不换行打印…...

git中忽略文件的配置

git中忽略文件的配置 一、在项目根目录下创建.gitignore文件二、配置规则如果在配置之前已经提交过文件了&#xff0c;要删除提交过的&#xff0c;如何修改&#xff0c;参考下面的 一、在项目根目录下创建.gitignore文件 .DS_Store node_modules/ /dist# local env files .env…...

如何进行前端职业规划

目录 找准自身定位 未来发展方向 扬长避短很有效 你的出处并不能代表什么 将目标放长放远 职业发展中面临的选择 全栈 or 纯前端? ToB or ToC 赚钱 or 个人成长? 分析每个阶段的需求 为什么不可以一边赚钱一边做喜欢的事情呢 我们还没离开校园的时候,就已经知道要…...

GD32F103系列单片机片上FLASH和ARM介绍

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 后续项目主要在下面该专栏中发布&#xff1a; 手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转&#xff1a; 手把手教你嵌入式国产化-实战项目-无刷电机驱动&am…...

Ansible自动化运维中的Setup收集模块应用详解

作者主页&#xff1a;点击&#xff01; Ansible专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年5月22日13点14分 &#x1f4af;趣站推荐&#x1f4af; 前些天发现了一个巨牛的&#x1f916;人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xf…...

再次学习History.scrollRestoration

再次学习History.scrollRestoration 之前在react.dev的源代码中了解到了这个HIstory的属性&#xff0c;当时写了一篇笔记来记录我对它的理解&#xff0c;现在看来还是一知半解。所以今天打算重新学习一下这个属性&#xff0c;主要从属性以及所属对象的介绍、使用方法&#xff0…...

python PyQt5 数字时钟程序

效果图&#xff1a; 概述 本文档将指导您如何使用Python的PyQt5库创建一个简单的时钟程序。该程序将显示当前时间&#xff0c;并具有以下特性&#xff1a; 始终在最前台显示。窗口可拖动。鼠标右键点击窗口可弹出退出菜单。时间标签具有红色渐变效果。窗口初始化时出现在屏幕…...

骨传导耳机哪个品牌值得入手?精选五大不容错过的王者品牌推荐!

尽管骨传导耳机作为新型蓝牙耳机问世不久&#xff0c;但凭借其独特的传音方式和舒适的佩戴体验&#xff0c;已经迅速在市场上崭露头角&#xff0c;赢得了广大音乐爱好者和运动达人的青睐。然而&#xff0c;随着骨传导耳机热度增高&#xff0c;市场上开始出现一些品质参差不齐的…...

Vue.js|项目安装

根据Vue脚手架创建出来的项目目录&#xff1a; 运行项目&#xff1a; 控制台中输入下面的命令&#xff1a; npm run serve 修改vue项目运行端口&#xff1a; 前往vue.config.js中添加下面的代码&#xff1a; devServer: {port: 7000} 接着前往控制台输入Ctrlc关闭项目&…...

多线程新手村4--定时器

定时器是日常开发中很常见的组件&#xff0c;定时器大家可能不知道是干什么的&#xff0c;但是定时炸弹肯定都听过&#xff0c;定个时间&#xff0c;过一段时间后bomb&#xff01;&#xff01;&#xff01;爆炸 定时器的逻辑和这个一样&#xff0c;约定一个时间&#xff0c;这…...

如何衡量安全阀检测的价格与价值?一文揭晓答案

安全阀作为工业设备中的重要组件&#xff0c;其性能的稳定性和可靠性直接影响着整个系统的安全运行。因此&#xff0c;对安全阀进行定期检测和维护显得尤为重要。 那么&#xff0c;安全阀检测一个需要多少钱呢&#xff1f; 在这篇文章中&#xff0c;佰德将从检测费用构成、市…...

Sectigo证书介绍以及申请流程

Sectigo (原Comodo CA)是全球SSL证书市场占有率最高的CA公司&#xff0c;目前将近40%的SSL证书用户选择了Sectigo。由于其产品安全&#xff0c;价格低&#xff0c;受到大量站长的信任和欢迎。Sectigo旗下的SSL证书品牌包括Sectigo, Positive SSL, Sectigo Enterprise等。 品牌…...

网络安全-钓鱼篇-利用cs进行钓鱼

一、环境 自行搭建&#xff0c;kill&#xff0c;Windows10&#xff0c;cs 二、原理 如图所示 三、钓鱼演示 首先第一步&#xff1a;打开System Profiler-分析器功能 选择克隆www.baidu.com页面做钓鱼 之后我们通过包装域名&#xff0c;各种手段让攻击对象访问&#xff1a;h…...

机器学习-6-对随机梯度下降算法SGD的理解

参考一文带您了解随机梯度下降(Stochastic Gradient Descent):python代码示例 参考sklearn-SGDClassifier 1 梯度下降 在机器学习领域,梯度下降扮演着至关重要的角色。梯度下降是一种优化算法,通过迭代沿着由梯度定义的最陡下降方向,以最小化函数。类似于图中的场景,可以…...

windows 11 精简版下载

Optimum 11 24H2 家庭版和专业版版本在性能、响应能力和资源使用方面相同&#xff0c;因此请下载并安装适合您笔记本电脑的正确版本或在您的 PC 上获得终极 Windows 11 24H2 体验的许可证&#xff01; • 如果您熟悉我们的 22H2 和 23H2 Optimum 11 版本&#xff0c;此版本将…...

rpm与yum扩展、命令

目录 系统安装软件方式 1、rpm方式 命令 yum方式 安装 更新和升级 查找与显示 删除程序 清除缓存 仅下载 系统安装软件方式 1、rpm方式 优点&#xff1a;无需网络安装软件 缺点&#xff1a;无法解决软件依赖 命令 rpm -ivh 安装 --nodeps忽略依赖关系 --force强…...

SpringBoot实现接口防抖的几种方案,杜绝重复提交

插&#xff1a; AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…...