Usaco Training刷怪旅 第二层第二题:Transformations

news2025/1/19 11:04:22

usaco training

关注我持续更新usaco training

A square pattern of size N x N (1 <= N <= 10) black and white square tiles is transformed into another square pattern. Write a program that will recognize the minimum transformation that has been applied to the original pattern given the following list of possible transformations:

  • #1: 90 Degree Rotation: The pattern was rotated clockwise 90 degrees.
  • #2: 180 Degree Rotation: The pattern was rotated clockwise 180 degrees.
  • #3: 270 Degree Rotation: The pattern was rotated clockwise 270 degrees.
  • #4: Reflection: The pattern was reflected horizontally (turned into a mirror image of itself by reflecting around a vertical line in the middle of the image).
  • #5: Combination: The pattern was reflected horizontally and then subjected to one of the rotations (#1-#3).
  • #6: No Change: The original pattern was not changed.
  • #7: Invalid Transformation: The new pattern was not obtained by any of the above methods.

In the case that more than one transform could have been used, choose the one with the minimum number above.

PROGRAM NAME: transform

 

INPUT FORMAT

Line 1:A single integer, N
Line 2..N+1:N lines of N characters (each either `@' or `-'); this is the square before transformation
Line N+2..2*N+1:N lines of N characters (each either `@' or `-'); this is the square after transformation

SAMPLE INPUT (file transform.in)

3
@-@
---
@@-
@-@
@--
--@

OUTPUT FORMAT

A single line containing the number from 1 through 7 (described above) that categorizes the transformation required to change from the `before' representation to the `after' representation.

SAMPLE OUTPUT (file transform.out)

1

 

说实话,这道题出的真的恶心

 

翻译一下:给你两个图案,问你用哪种方法能把第一个图形变成第二个图形,并且方法编号要最小

第一种方法:顺时针旋转90°

第二种方法:顺时针旋转180°

第三种方法:顺时针旋转270°

第四种方法:水平反射

 

第五种:先反射再旋转(1-3种之间的任意一种)

第六种:不做任何改动,本身就一样

第七种:怎么改都不行

如果我们真的按照上述说的一样对图形进行改变的话肯定是不现实的

我们只能按照数组下标进行找规律

第一种:

 

旋转90°

我们找几个位置的下标进行找规律

 

a[i][j]=b[j][n-i+1]

第二种:

b[n-i+1][n-j+1]=a[i][j] 

第三种:

b[n-j+1][i]=a[i][j]; 

第四种:

b[i][n-j+1]=a[i][j]

第五种:

这个没有自己的图了,就是结合起来

把上面的结合起来,就成为了ac代码

函数名自己随便取就行

/*
ID:
TASK:transform
LANG:C++
*/
# include <iostream>
# include <cstdio>
using namespace std;
# define int long long
# define N 15
char fir[N][N],sec[N][N];
int n;
char temp[N][N];
bool zhijiao(){
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			temp[j][n-i+1]=fir[i][j];
		}
	}
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			if (temp[i][j]!=sec[i][j]){
				return false;
			}
		}
	}
	return true;
}
bool pingjiao(){
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			temp[n-i+1][n-j+1]=fir[i][j];
		}
	}
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			if (temp[i][j]!=sec[i][j]){
				return false;
			}
		}
	}
	return true;
}
bool _270(){
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			temp[n-j+1][i]=fir[i][j];
		}
	}
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			if (temp[i][j]!=sec[i][j]){
				return false;
			}
		}
	}
	return true;
}
bool fanshe(){
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			temp[i][n-j+1]=fir[i][j];
		}
	}
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			if (temp[i][j]!=sec[i][j]){
				return false;
			}
		}
	}
	return true;
}
bool zuhe(){
	fanshe();
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			fir[i][j]=temp[i][j];
		}
	}
	if (zhijiao()||pingjiao()||_270()){
		return true;
	}
	return false;
}
bool dont(){
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			if (fir[i][j]!=sec[i][j]){
				return false;
			}
		}
	}
	return true;
}
signed main(){
	freopen("transform.in","r",stdin);
	freopen("transform.out","w",stdout);
	scanf("%lld",&n);
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			cin>>fir[i][j];
		}
	}
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			cin>>sec[i][j];
		}
	}
	if (zhijiao()){
		printf("1\n");
		return 0;
	}else if (pingjiao()){
		printf("2\n");
		return 0;
	}else if (_270()){
		printf("3\n");
		return 0;
	}else if (fanshe()){
		printf("4\n");
		return 0;
	}else if (zuhe()){
		printf("5\n");
		return 0;
	}else if (dont()){
		printf("6\n");
		return 0;
	}else{
		printf("7\n");
		return 0;
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}

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

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

相关文章

QCon直击|闲鱼推荐大规模应用背后的工程实践

讲师介绍闲鱼技术部 | 吴白万小勇&#xff08;吴白&#xff09;&#xff0c;闲鱼服务端专家。毕业于南京大学计算机系&#xff0c;目前负责闲鱼技术推荐架构。推荐在闲鱼的应用不同于搜索的确定性&#xff0c;推荐场景面临的问题往往是不确定的。但是正是因为这种不确定&#x…

Kafka无法对外暴露端口的相关解决方案

1、kafka开放外部访问 1.1、修改kafka configMap 修改内容如下 # 修改EXTERNAL_ACCESS_IP变量&#xff0c;值为真实的外网IP export EXTERNAL_ACCESS_IP${真实的外网IP} 1.2、重启kafka # 重启kafka kubectl rollout restart statefulset kafka -n default # 查看kafka状态 k…

盛邦安全将于12月27日上会,2022年前三季度收入1亿元

12月20日&#xff0c;上海证券交易所披露的科创板上市委2022年第112次审议会议公告显示&#xff0c;远江盛邦&#xff08;北京&#xff09;网络安全科技股份有限公司&#xff08;下称“盛邦安全”&#xff09;将于2022年12月27日上会。 目前&#xff0c;盛邦安全已经提交了招股…

在tushare量化平台可以获取哪些数据?

沪深股票数据是Tushare量化最传统、最具历史意义的数据服务项目从一开始就为投资者特别是定量投资者提供了稳定、方便的接口。 1.基础数据 提供交易和回测所需要的基础信息&#xff0c;目前主要提供的是上市公司股票列表和交易日历等 2.行情数据 行情数据目前还在继续规则和…

“史上最贵”卡塔尔世界杯,有哪些炫酷的“黑科技”?

2022年卡塔尔世界杯投入超过2200亿美元&#xff0c;堪称“史上最贵世界杯”。这些投入不仅用在了场馆、道路等基础设施建设中&#xff0c;也体现在让人震撼的芯片传感器、人工智能、先进技术等“黑科技”上。今年的卡塔尔世界杯有什么“科技感十足”的先进技术&#xff1f;让我…

坐标系相关整理

参考url:https://www.jianshu.com/p/06890af3d780 Dicom坐标系 x轴&#xff1a;从右手到左手 y轴&#xff1a;从前胸到后背 z轴&#xff1a;从脚到头 解刨学坐标系 医学人体三解剖面&#xff0c;医疗影像三维图&#xff0c;主要是针对人体来说。解剖学上的坐标体系&#xff0…

常见垃圾回收器

1.Serial垃圾回收器 Serial&#xff08;串行&#xff09;收集器是最基本、历史最悠久的垃圾收集器了&#xff0c;是一个单线程收集器 它只会使用一个垃圾收集线程去完成垃圾收集工作 它在进行垃圾收集工作的时候必须暂停其他所有的工作线程&#xff08; "Stop The Worl…

C++——STL之vector详解

C——STL之vector详解&#x1f3d0;1.什么是vector&#x1f3d0;2.vector的使用&#x1f3c0;2.1vector的实例化&#x1f3c0;2.2访问遍历vector⚽2.2.1**下标[]**⚽2.2.2**迭代器**⚽2.2.3**范围for**&#x1f3c0;2.3.vector容量问题⚽2.3.1size和capacity⚽2.3.2reserve和re…

二叉树先、中、后遍历递归+非递归

文章目录前言思路设计思想非递归前序遍历的思路非递归中序遍历的思路非递归后序遍历的思路层序遍历的思路完整代码MyBinaryTree.hMyBinaryTree.cppMain.cpp效果展示前言 作者水平有限&#xff0c;全部的代码是学习前人部分原创不要搬代码&#xff0c;一定要借鉴学习&#xff0…

接口测试的痛点和解决办法

在做接口测试时&#xff0c;以下几个测试痛点&#xff0c;一定要仔细琢磨下&#xff1a; 痛点①&#xff1a;由于测试环境数据被改动&#xff0c;导致接口测试失败 这个问题&#xff0c;最好的办法就是重新调用数据库中的最新数据。在做测试用例时&#xff0c;也要考虑到实时调…

汽车服务行业概况与供应商评估方案介绍,数商云SRM系统助力多维考核供应商

近年来&#xff0c;汽车保有量不断增长&#xff0c;中国汽车市场连续多年成为全球产销第一&#xff0c;伴随物联网技术的不断渗透&#xff0c;车联网开始兴起&#xff0c;带给线上线下汽车相关服务行业新的发展机遇。 当前汽车服务行业整体概况 1、市场需求增加&#xff1a;市…

Vue基础超详细

目录 一、Vue的简介 1、什么是vue 2、vue 的特性&#xff08;数据驱动视图、双向数据绑定&#xff09; 3、MVVM及其工作原理 二、Vue的基本实用 1、基本使用步骤 2、配置Vue的调试工具 3、指令与过滤器 3.1内容渲染指令 4、属性绑定指令 5、使用Javascript表达式 6、事件绑…

“ 念旧真的是一件很无趣的事 “

想要的都拥有 得不到的都释然 My Jinji音频&#xff1a;00:0006:40 | 01 | 想通就释然 想不通就茫然 每天不停的循环 | 02 | 终于理解你曾经说的 “有些人不能做朋友” 现在我和你一样惨 | 03 | 村上春树说过&#xff1a; “如果一直想见谁 肯定迟早会见到” 但是他还…

android入门之创建service

1. 前言 Service意为&#xff1a;服务&#xff0c;是一种运行时用户不可见的活动机制。可以理解为它是一个没有布局的Activity。 典型的场景&#xff1a;音乐后台播放、后台下载。 Service不同于子线程&#xff0c;Service是运行在主线程中的&#xff0c;因此不能进行耗时操作。…

电线电缆行业MES系统,帮助企业快速应对订单变化,减少资金占用

电线电缆行业生产管理现状 电线电缆行业是典型的重资产行业&#xff0c;原材料成本高、产品价值高、资金占用大、产品规格型号多达数万种&#xff0c;BOM管理繁杂&#xff0c;现场管理粗放&#xff0c;订单经常会合并或拆分生产&#xff0c;对排程要求高。 1、计划制定不准确…

无分类编址CIDR

无分类编址CIDR 构成超网 将多个子网聚合成一个较大的子网&#xff0c;叫做构成超网&#xff0c;或路由聚合。 方法&#xff1a;将网络前缀缩短&#xff08;所有网络地址取交集&#xff09;。 例题 某路由表中有转发接口相同的4条路由表项&#xff0c;其目的网络地址分别为…

Unicode编码的理解

1、Unicode 这个单词可以拆解为两部分&#xff0c;一个是Uni ,即英文单词unique的意思&#xff0c;也就是唯一的意思。code就是编码的意思。 GBK编码的理解_sgmcy的博客-CSDN博客 在上节博客里面&#xff0c;介绍了ASCII编码、ASCII编码表的扩展以及我们国家汉字的GBK编码。 …

详解OpenCV的椭圆曲线点坐标近似计算函数ellipse2Poly()

详解OpenCV的椭圆曲线点坐标近似计算函数ellipse2Poly() 函数ellipse2Poly()可用于近似计算椭圆曲线的像素坐标。 而前面介绍过的函数ellipse()则是直接在图像中绘制椭圆&#xff0c;详情见 https://www.hhai.cc/thread-174-1-1.html 函数ellipse2Poly()的C原型如下&#xff…

【Shell】find文件查找

语法格式 find [路径] [选项] [操作]选项参数对照表 常用选项 -name 查找/etc目录下以conf结尾的文件ind /etc -nam -iname 查找当前目录下文件名为aa的文件,不区分大小写 find . -iname aa -user 查找文件属主为hdfs的所有文件find . -user hdfs -group 查找文件属组为yarn的…

虹科方案 | 解决连接到IEEE 1588高可用性网络的SCADA系统的NTP同步参考问题

目前&#xff0c;各个行业都在朝着以太网融合的趋势发展&#xff0c;近年来也出现了一些可用于增强标准以太网弹性的技术创新&#xff0c;并被用作运营&#xff08;OT&#xff09;和信息技术&#xff08;IT)的通用链路层。电气等具有高可用性和严格时序要求的关键领域推动了这些…