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

P1205 方块转换 Transformations【洛谷算法习题】

P1205 方块转换 Transformations

网页链接

P1205 方块转换 Transformations

题目描述

一块n × n n \times nn×n正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:

  • 90 ° 90\degree90°:图案按顺时针转90 ° 90\degree90°

  • 180 ° 180\degree180°:图案按顺时针转180 ° 180\degree180°

  • 270 ° 270\degree270°:图案按顺时针转270 ° 270\degree270°

  • 反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。

  • 组合:图案在水平方向翻转,然后再按照1 ∼ 3 1 \sim 313之间的一种再次转换。

  • 不改变:原图案不改变。

  • 无效转换:无法用以上方法得到新图案。

如果有多种可用的转换方法,请选择序号最小的那个。

只使用上述7 77个中的一个步骤来完成这次转换。

输入格式

第一行一个正整数n nn

然后n nn行,每行n nn个字符,全部为@-,表示初始的正方形。

接下来n nn行,每行n nn个字符,全部为@-,表示最终的正方形。

输出格式

单独的一行包括1 ∼ 7 1 \sim 717之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法。

输入输出样例 #1

输入 #1

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

输出 #1

1

说明/提示

【数据范围】
对于100 % 100\%100%的数据,1 ≤ n ≤ 10 1\le n \le 101n10

题目翻译来自 NOCOW。

USACO Training Section 1.2

解题思路

本题核心是矩阵变换模拟+按优先级校验,严格按照题目要求的转换序号顺序判断最优解。首先实现两个基础变换函数:顺时针旋转90度、水平镜像翻转,180度/270度旋转通过重复调用旋转函数实现,组合变换为翻转后叠加旋转。按照序号1→2→3→4→5→6的优先级,依次对原始矩阵执行对应变换,每变换一次就与目标矩阵比对,一旦匹配立即输出对应序号;若所有变换都不匹配,输出7代表无效转换。由于数据规模n ≤ 10 n≤10n10,暴力模拟变换过程简洁高效,完全满足题目要求。

总结

核心逻辑:按题目指定的序号优先级,模拟所有合法矩阵变换,逐一匹配目标矩阵。
关键操作:实现旋转、翻转基础变换,按序校验匹配结果。
效率保障:小数据暴力模拟,代码简洁直观,严格遵循题目规则。

代码内容

#include<iostream>#include<vector>#include<string>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll p=1e9+7;constll INF=1e18;constll M=1e6+10;typedefvector<string>G;Gr90(constG&g){intn=g.size();Gr(n,string(n,' '));for(inti=0;i<n;++i)for(intj=0;j<n;++j)r[j][n-1-i]=g[i][j];returnr;}Gref(constG&g){intn=g.size();G r=g;for(inti=0;i<n;++i)for(intj=0;j<n/2;++j)swap(r[i][j],r[i][n-1-j]);returnr;}booleq(constG&a,constG&b){intn=a.size();for(inti=0;i<n;++i)for(intj=0;j<n;++j)if(a[i][j]!=b[i][j])returnfalse;returntrue;}intmain(){intn;cin>>n;Ga(n),b(n);for(inti=0;i<n;++i)cin>>a[i];for(inti=0;i<n;++i)cin>>b[i];G r=a;for(inti=1;i<=3;++i){r=r90(r);if(eq(r,b)){cout<<i<<endl;return0;}}G rf=ref(a);if(eq(rf,b)){cout<<4<<endl;return0;}r=rf;for(inti=1;i<=3;++i){r=r90(r);if(eq(r,b)){cout<<5<<endl;return0;}}if(eq(a,b)){cout<<6<<endl;return0;}cout<<7<<endl;return0;}
http://www.jsqmd.com/news/751142/

相关文章:

  • ESP32智能网络收音机终极指南:用YoRadio打造你的个性化音频中心 [特殊字符]
  • d2s-editor:5分钟学会用开源工具安全修改暗黑破坏神2存档
  • 5分钟快速上手PlayCover:在Mac上完美运行iOS游戏和应用
  • 5分钟完成Degrees of Lewdity视觉美化:零基础玩家的终极指南
  • 告别配置混乱:用Python脚本自动化处理Autosar CAN通信的DBC与Excel信号表
  • 7步精通:网盘直链解析工具LinkSwift技术深度解析
  • Video2X:零基础入门AI视频超分辨率与帧插值完整指南
  • 新手避坑指南:识别W底、头肩底时,90%的人都会忽略的5个细节(以A股为例)
  • Notepad--跨平台文本编辑器文件关联机制技术解析
  • Speechless:一键备份微博到PDF的终极Chrome扩展指南
  • QuickBMS:3大场景解锁游戏资源提取的万能钥匙
  • MASA模组全家桶中文汉化包:终极指南让Minecraft技术模组无障碍使用
  • 终极指南:如何用耶鲁OpenHand开源机械手构建低成本机器人抓取系统
  • Bandgap设计避坑指南:为什么你的PSR不达标?从Cascode电流镜到启动电路的细节剖析
  • Hitboxer:5分钟打造零冲突游戏键盘的终极SOCD解决方案
  • 在 Claude Code 中配置 Taotoken 作为 Anthropic 兼容通道的详细步骤
  • 工作站虚拟化如何保障数据安全?设计图纸不再外泄
  • 在统信UOS上编译Qt5.12.8源码,我踩过的那些坑和高效配置方案
  • 【.NET 9边缘部署黄金法则】:5步实现ARM64设备零故障跨平台上线(20年微软生态实战验证)
  • 甘肃鸿旺发资源回收:红古正规的变压器回收怎么联系 - LYL仔仔
  • C++STL:list(双链表)的底层实现 部分源码解析
  • 网页小游戏
  • 金融学论文降AI工具免费推荐:2026年财经类毕业论文4.8元极速降AI知网通过完整指南 - 还在做实验的师兄
  • CPUDoc:3大核心功能解锁CPU隐藏性能,让你的电脑快如闪电
  • 创业团队如何通过Taotoken管理多个AI项目的API成本
  • 3分钟搞定远程游戏手柄:RdpGamepad终极解决方案
  • 工作站虚拟化与普通桌面云有什么区别?
  • Python heapq实战:用内置小顶堆搞定Top K问题(附LeetCode真题)
  • 基于飞书与RAG技术构建企业知识库智能体:从原理到部署实践
  • BilibiliDown:B站视频下载的终极解决方案与完整使用指南