news 2026/6/12 18:36:55

UVa 466 Mirror Mirror

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 466 Mirror Mirror

题目描述

题目要求识别给定正方形图案经过的变换。可能的变换有:

  • 90 Degree Rotation\texttt{90 Degree Rotation}90 Degree Rotation:顺时针旋转909090
  • 180 Degree Rotation\texttt{180 Degree Rotation}180 Degree Rotation:顺时针旋转180180180
  • 270 Degree Rotation\texttt{270 Degree Rotation}270 Degree Rotation:顺时针旋转270270270
  • Vertical Reflection\texttt{Vertical Reflection}Vertical Reflection:垂直反射(上下翻转)
  • Combination\texttt{Combination}Combination:先垂直反射,再执行上述三种旋转之一
  • Preservation\texttt{Preservation}Preservation:图案不变
  • Improper\texttt{Improper}Improper:不能由以上任何变换得到

变换的优先级(工作量由小到大)为:Preservation < 90度旋转 < 180度旋转 < 270度旋转 < 垂直反射 < 垂直反射+90度 < 垂直反射+180度 < 垂直反射+270度。若图案可通过多种变换得到,输出工作量最小的那个。

输入格式

输入包含多个图案数据集。每个数据集第一行为整数nnn1≤n≤101 \le n \le 101n10),表示图案的边长。接下来nnn行,每行包含两个字符串,各由nnn个字符组成(.表示亮,X表示暗),分别表示原始图案和变换后图案,中间用空格分隔。输入以文件结束符(EOF\texttt{EOF}EOF)终止。

输出格式

对于每个数据集,输出一行,格式为:

Pattern X was 变换描述.

其中X为数据集编号(从111开始),变换描述为上述列表中的短语。

样例

输入

5 X...X ....X .X... ...X. ...X. .X... ..X.X ..X.. ....X XX..X 6 ....XX X....X ...X.. X.X... XX..X. .X..X. ..X... ...X.X ...X.. ..X... ..X..X ..X.. 2 X. X. .X .X 4 ..X. ...X XX.. .... .... XX.. ...X ..X. 5 X.... .X... .X... ..X.. .X... ..X.. ...X. ....X ....X X.... 4 .X.. ..X. .X.X X... .... ..XX ..X. .... 2 .. XX XX ..

输出

Pattern 1 was rotated 90 degrees. Pattern 2 was rotated 270 degrees. Pattern 3 was preserved. Pattern 4 was reflected vertically. Pattern 5 was improperly transformed. Pattern 6 was reflected vertically and rotated 270 degrees. Pattern 7 was rotated 180 degrees.

题目分析

本题的核心是实现图案的旋转变换和垂直反射,并按优先级顺序检查变换结果。

图案表示

n×nn \times nn×n的图案存储为长度为n2n^2n2的字符串,按行主序排列(第111行从左到右,然后是第222行,依此类推)。

变换实现

  • 顺时针旋转909090:原位置(r,c)(r, c)(r,c)000索引)映射到新位置(c,n−1−r)(c, n-1-r)(c,n1r)。在字符串中,原索引为r×n+cr \times n + cr×n+c,新索引为c×n+(n−1−r)c \times n + (n-1-r)c×n+(n1r)
  • 顺时针旋转180180180:可将字符串整体反转。
  • 顺时针旋转270270270(即逆时针909090度):原位置(r,c)(r, c)(r,c)映射到(n−1−c,r)(n-1-c, r)(n1c,r)
  • 垂直反射(上下翻转):原位置(r,c)(r, c)(r,c)映射到(n−1−r,c)(n-1-r, c)(n1r,c)

检查顺序

按工作量递增的顺序检查:

  1. 原始图案是否等于变换后图案(Preservation)
  2. 旋转909090
  3. 旋转180180180
  4. 旋转270270270
  5. 垂直反射
  6. 垂直反射后再旋转909090
  7. 垂直反射后再旋转180180180
  8. 垂直反射后再旋转270270270
  9. 若均不匹配,则为 Improper

复杂度分析

每种变换操作O(n2)O(n^2)O(n2)n≤10n \le 10n10,完全可接受。

代码实现

// Mirror, Mirror// UVa ID: 466// Verdict: Accepted// Submission Date: 2016-07-21// UVa Run Time: 0.000s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;stringrotateCW90(string matrix,intn){string newMatrix;for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)newMatrix+=matrix[(n-1)*n+(i-1)-(j-1)*n];returnnewMatrix;}stringrotateCCW90(string matrix,intn){string newMatrix;for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)newMatrix+=matrix[(n-1)-(i-1)+(j-1)*n];returnnewMatrix;}stringrotate180(string matrix){reverse(matrix.begin(),matrix.end());returnmatrix;}stringreflect(string matrix,intn){string newMatrix;for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)newMatrix+=matrix[(n-i)*n+(j-1)];returnnewMatrix;}intmain(intargc,char*argv[]){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);intn,cases=0;while(cin>>n){cout<<"Pattern "<<++cases<<" was ";string original,transformed;charletter;for(inti=1;i<=n;i++){for(intj=1;j<=n;j++){cin>>letter;original.push_back(letter);}for(intj=1;j<=n;j++){cin>>letter;transformed.push_back(letter);}}if(original==transformed){cout<<"preserved.\n";continue;}if(rotateCW90(original,n)==transformed){cout<<"rotated 90 degrees.\n";continue;}if(rotate180(original)==transformed){cout<<"rotated 180 degrees.\n";continue;}if(rotateCCW90(original,n)==transformed){cout<<"rotated 270 degrees.\n";continue;}original=reflect(original,n);if(original==transformed){cout<<"reflected vertically.\n";continue;}if(rotateCW90(original,n)==transformed){cout<<"reflected vertically and rotated 90 degrees.\n";continue;}if(rotate180(original)==transformed){cout<<"reflected vertically and rotated 180 degrees.\n";continue;}if(rotateCCW90(original,n)==transformed){cout<<"reflected vertically and rotated 270 degrees.\n";continue;}cout<<"improperly transformed.\n";}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 18:33:58

Kinesalite核心架构解析:从LevelDB到Kinesis API的完整实现

Kinesalite核心架构解析&#xff1a;从LevelDB到Kinesis API的完整实现 【免费下载链接】kinesalite An implementation of Amazons Kinesis built on LevelDB 项目地址: https://gitcode.com/gh_mirrors/ki/kinesalite Kinesalite是一个基于LevelDB构建的Amazon Kinesi…

作者头像 李华
网站建设 2026/6/12 18:33:58

探索HS2-HF Patch:为Honey Select 2玩家开启游戏增强新可能

探索HS2-HF Patch&#xff1a;为Honey Select 2玩家开启游戏增强新可能 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF Patch是一个专为Honey Select 2游…

作者头像 李华
网站建设 2026/6/12 18:31:57

3分钟学会:Bulk Crap Uninstaller批量卸载神器终极指南

3分钟学会&#xff1a;Bulk Crap Uninstaller批量卸载神器终极指南 【免费下载链接】Bulk-Crap-Uninstaller Remove large amounts of unwanted applications quickly. 项目地址: https://gitcode.com/gh_mirrors/bu/Bulk-Crap-Uninstaller 你是否厌倦了Windows电脑上堆…

作者头像 李华
网站建设 2026/6/12 18:29:08

嵌入式开发利器KwikStik:ARM Cortex-M4一体化平台实战解析

1. 项目概述&#xff1a;为什么选择KwikStik作为嵌入式开发的起点&#xff1f;在嵌入式开发的世界里&#xff0c;尤其是当你初次接触ARM Cortex-M4这类性能与功能兼备的微控制器时&#xff0c;最头疼的往往不是写代码&#xff0c;而是如何快速搭建一个能“跑起来”的验证环境。…

作者头像 李华