洛谷每日一题(P1205 [USACO1.2] 方块转换 Transformations)矩阵变换

news2024/11/27 21:03:38

原题目链接:

P1205 [USACO1.2] 方块转换 Transformations - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

原题目截图:

思路分析:

这题目还是比较简单,模拟一下旋转变化的过程,然后注意变换的规律就行了。

  1. 读取输入:首先读取矩阵的大小 n,然后分别读取两个矩阵 startend

  2. 定义操作函数

    • op1:顺时针旋转90度。
    • op2:逆时针旋转90度(通过两次旋转180度实现)。
    • op3:逆时针旋转90度。
    • op4:水平方向翻转。
    • op5:先水平翻转,然后尝试顺时针或逆时针旋转90度。
    • op6:不做任何操作。
  3. 比较矩阵:通过调用上述操作函数,比较操作后的 start 矩阵是否与 end 矩阵相等。

  4. 输出结果:根据操作函数的返回值,输出对应的操作编号。如果所有操作都无法将 start 矩阵转换成 end 矩阵,则输出7。

解决代码:

#include<iostream>
using namespace std;
#include<vector>

bool op1(vector<vector<char>>&start,
	vector<vector<char>>& end,int n) {
	//顺时针旋转90度
	vector<vector<char>>martix = start;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			martix[j][n - 1 - i] = start[i][j];
		}
	}
	return end == martix;
	
}



bool op2(vector<vector<char>>& start,
	vector<vector<char>>& end, int n) {
	vector<vector<char>>martix = start;
	for (int i = n - 1; i >= 0; i--) {
		for (int j = n - 1; j >= 0; j--) {
			martix[n - 1 - i][n - 1 - j] = start[i][j];
		}
	}
	return end == martix;

}


bool op3(vector<vector<char>>& start,
	vector<vector<char>>& end, int n) {
	vector<vector<char>>martix = start;
	//逆时针旋转90度

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			martix[n-1-j][i] = start[i][j];
		}
	}
	return end == martix;


}

bool op4(vector<vector<char>>& start,
	vector<vector<char>>& end, int n) {
	vector<vector<char>>martix = start;
	//水平方向翻转

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			martix[i][n-1-j] = start[i][j];
		}
	}
	return end == martix;


}


bool op5(vector<vector<char>>& start,
	vector<vector<char>>& end, int n) {
	vector<vector<char>>martix = start;
	//水平方向翻转后,再执行op1,op2,op3之间的其中一种方式
	
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			martix[i][n - 1 - j] = start[i][j];
		}
	}
	return op1(martix, end, n) || op2(martix, end, n) || op3(martix, end, n);


}

bool op6(vector<vector<char>>& start,
	vector<vector<char>>& end, int n) {
	vector<vector<char>>martix = start;
	//不变
	return end == start;

}





int main() {
	int n;
	cin >> n;
	vector<vector<char>>start(n,vector<char>(n));
	vector<vector<char>>end(n, vector<char>(n));
	for (int i = 0; i < n; i++) {
		string str;
		cin >> str;
		for (int j = 0; j < str.size();j++) {
			start[i][j] = str[j];
		}
	}

	for (int i = 0; i < n; i++) {
		string str;
		cin >> str;
		for (int j = 0; j < str.size(); j++) {
			end[i][j] = str[j];
		}
	}

	if (op1(start, end, n))  cout << 1;
	else if (op2(start, end, n)) cout << 2;
	else if (op3(start, end, n)) cout << 3;
	else if (op4(start, end, n)) cout << 4;
	else if (op5(start, end, n)) cout << 5;
	else if (op6(start, end, n)) cout << 6;
	else cout << 7;  //无法转换
	return 0;

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑提示msvcp140.dll丢失如何解决,马上教你6种解决方法

在使用电脑时&#xff0c;我们可能会遇到提示缺少msvcp140.dll的错误信息。这个提示意味着我们的电脑中缺少MSVCP140.dll这个文件&#xff0c;它是某些程序运行所必需的。如果我们遇到这个问题&#xff0c;应该如何解决呢&#xff1f;本文将详细解析如何解决msvcp140.dll丢失的…

C. Tree Pruning【Codeforces Round 975 (Div. 1)】

C. Tree Pruning (永远不知道为什么TLE直到把初始化的memset换成for循环 题意很简单&#xff0c;就是找到一个深度&#xff0c;使得删除最少的节点且所有的叶子节点都为这个深度。 从小到大遍历可能的深度i&#xff0c;容易知道所有 深度大于i的节点 和所有 子树最大深度小于i…

vue出现Component name “Politic“ should always be multi-word错误

效果 原因 组件名不能为单个单词&#xff0c;怕和html标签混淆 解决方法 1.选择多个单词区分 2.修改package.json里的rules规则&#xff0c;忽略文件命名校验

详细解释:前向传播、反向传播等

详细解释:前向传播、反向传播等 在机器学习和深度学习中,**前向传播(Forward Propagation)和反向传播(Backward Propagation)**是训练神经网络的两个核心过程。理解这两个概念对于掌握神经网络的工作原理、优化方法以及模型微调技术(如LoRA、P-tuning等)至关重要。以下…

YOLO11改进|注意力机制篇|引入ELA注意力机制

目录 一、【ELA】注意力机制1.1【ELA】注意力介绍1.2【ELA】核心代码 二、添加【ELA】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【ELA】注意力机制 1.1【ELA】注意力介绍 这篇论文的作者通过分析Coordinate Attention(C…

Python中的数据可视化:从入门到进阶

数据可视化是数据分析和科学计算中的重要环节&#xff0c;它通过图形化的方式呈现数据&#xff0c;使复杂的统计信息变得直观易懂。Python提供了多种强大的库来支持数据可视化&#xff0c;如Matplotlib、Seaborn、Plotly等。本文将从基础到进阶&#xff0c;详细介绍如何使用这些…

如何构建LSTM神经网络模型

一、了解LSTM 1. 核心思想 首先&#xff0c;LSTM 是 RNN&#xff08;循环神经网络&#xff09;的变体。它通过引入细胞状态 C(t) 贯穿于整个网络模型&#xff0c;达到长久记忆的效果&#xff0c;进而解决了 RNN 的长期依赖问题。 2. 思维导图 每个LSTM层次都有三个重要的门结构…

贝尔曼公式

为什么return 非常重要 在选择哪个策略更好的时候&#xff0c;此时需要使用到return&#xff0c;比如下面三个策略的返回值。 策略1: 策略2&#xff1a;策略3&#xff1a;涉及到两个policys path How to calculate return 定义 上图定义了不同的起点下的return value 递推…

优化销售漏斗建立高效潜在客户生成策略的技巧

如何建立有效的潜在客户生成策略&#xff1f;建立有效潜在客户生成策略需要准确定义目标受众&#xff0c;利用内容营销、SEO、社交媒体、邮件营销和定向广告吸引客户&#xff0c;参加行业会议并跟踪分析数据。借助Zoho CRM系统&#xff0c;企业能够更加高效地管理客户信息&…

Windows上 minGW64 编译 libssh2库

下载libssh2库:https://libssh2.org/download/libssh2-1.11.0.zip 继续下载OpenSSL库: https://codeload.github.com/openssl/openssl/zip/refs/heads/OpenSSL_1_0_2-stable

算法讲解—最小生成树(Kruskal 算法)

算法讲解—最小生成树&#xff08;Kruskal 算法&#xff09; 简介 根据度娘的解释我们可以知道&#xff0c;最小生成树(Minimum Spanning Tree, MST)就是&#xff1a;一个有 n n n 个结点的连通图的生成树是原图的极小连通子图&#xff0c;且包含原图中的所有 n n n 个结点…

【Diffusion分割】CTS:基于一致性的医学图像分割模型

CTS: A Consistency-Based Medical Image Segmentation Model 摘要&#xff1a; 在医学图像分割任务中&#xff0c;扩散模型已显示出巨大的潜力。然而&#xff0c;主流的扩散模型存在采样次数多、预测结果慢等缺点。最近&#xff0c;作为独立生成网络的一致性模型解决了这一问…

【Python】数据可视化之聚类图

目录 clustermap 主要参数 参考实现 clustermap sns.clustermap是Seaborn库中用于创建聚类热图的函数&#xff0c;该函数能够将数据集中的样本按照相似性进行聚类&#xff0c;并将聚类结果以矩阵的形式展示出来。 sns.clustermap主要用于绘制聚类热图&#xff0c;该热图通…

云计算第四阶段 CLOUD2周目 01-03

国庆假期前&#xff0c;给小伙伴们更行完了云计算CLOUD第一周目的内容&#xff0c;现在为大家更行云计算CLOUD二周目内容&#xff0c;内容涉及K8S组件的添加与使用&#xff0c;K8S集群的搭建。最重要的主体还是资源文件的编写。 (*^▽^*) 环境准备&#xff1a; 主机清单 主机…

CUDNN下载配置

目录 简介 下载 配置 简介 cuDNN&#xff08;CUDA Deep Neural Network library&#xff09;是NVIDIA开发的一个深度学习GPU加速库&#xff0c;旨在提供高效、标准化的原语&#xff08;基本操作&#xff09;来加速深度学习框架&#xff08;如TensorFlow、PyTorch等&#xf…

Rust 快速入门(一)

Rust安装信息解释 cargo&#xff1a;Rust的编译管理器、包管理器、通用工具。可以用Cargo启动新的项目&#xff0c;构建和运行程序&#xff0c;并管理代码所依赖的所有外部库。 Rustc&#xff1a;Rust的编译器。通常Cargo会替我们调用此编译器。 Rustdoc&#xff1a;是Rust的…

Java 面向对象设计一口气讲完![]~( ̄▽ ̄)~*(上)

目录 Java 类实例 Java面向对象设计 - Java类实例 null引用类型 访问类的字段的点表示法 字段的默认初始化 Java 访问级别 Java面向对象设计 - Java访问级别 Java 导入 Java面向对象设计 - Java导入 单类型导入声明 按需导入声明 静态导入声明 例子 Java 方法 J…

decltype推导规则

decltype推导规则 当用decltype(e)来获取类型时&#xff0c;编译器将依序判断以下四规则&#xff1a; 1.如果e是一个没有带括号的标记符表达式(id-expression)或者类成员访问表达式&#xff0c;那么decltype(e)就是e所命名的实体的类型。此外&#xff0c;如果e是一个被重载的函…

k8s 之安装metrics-server

作者&#xff1a;程序那点事儿 日期&#xff1a;2024/01/29 18:25 metrics-server可帮助我们查看pod的cpu和内存占用情况 kubectl top po nginx-deploy-56696fbb5-mzsgg # 报错&#xff0c;需要Metrics API 下载 Metrics 解决 wget https://github.com/kubernetes-sigs/metri…

基于auth2的单点登录原理理解

创作背景&#xff1a;基于auth2实现企业门户与业务系统的单点登录跳转。 架构组成&#xff1a;4A统一认证中心&#xff0c;门户系统&#xff0c;业务系统&#xff0c;用户&#xff1b; 实现目标&#xff1a;用户登录门户系统后&#xff0c;可通过点击业务系统菜单&#xff0c…