欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

洛谷 P1205 [USACO1.2]方块转换 Transformations

发布时间:2025/3/15 编程问答 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 洛谷 P1205 [USACO1.2]方块转换 Transformations 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目描述

一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:

1:转90度:图案按顺时针转90度。

2:转180度:图案按顺时针转180度。

3:转270度:图案按顺时针转270度。

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

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

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

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

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

只使用1–7中的一个步骤来完成这次转换。

输入输出格式

输入格式:
第一行: 单独的一个整数N。

第二行到第N+1行: N行每行N个字符(不是“@”就是“-”);这是转换前的正方形。

第N+2行到第2*N+1行: N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。

输出格式:
单独的一行包括1到7之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法。

输入输出样例

输入样例#1:

输出样例#1:
1

说明
题目翻译来自NOCOW。
USACO Training Section 1.2
.
.
.
.
.
.
分析
一道模拟题
这里调换了2和3,是因为不存在顺时针转90度不可行,而顺时针转180度和逆时针转90度同时可行的情况。
.
.
.
.
.
.
程序:

#include<iostream> using namespace std; int n,flag,f,g,h,x,y,p,z; char a[100][100],b[100][100],c[100][100],d[100][100],e[100][100],w[100][100],r[100][100],t[100][100]; int main() {cin>>n;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>a[i][j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>d[i][j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)b[i][j]=a[j][i];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)c[i][j]=b[i][n+1-j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(c[i][j]!=d[i][j]){flag=1;break;}if(flag==0){cout<<1;return 0;}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)e[i][j]=a[j][i];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)w[i][j]=e[n+1-i][j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(w[i][j]!=d[i][j]){f=1;break;}if(f==0&&flag==1){cout<<3;return 0;}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)r[i][j]=a[n+1-i][j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)t[i][j]=r[i][n+1-j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(t[i][j]!=d[i][j]){g=1;break;}if(g==0&&f==1&&flag==1){cout<<2;return 0;}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)t[i][j]=a[i][n+1-j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(t[i][j]!=d[i][j]){x=1;break;}if(x==0&&g==1&&f==1&&flag==1){cout<<4;return 0;}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)t[i][j]=a[i][n+1-j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)b[i][j]=t[j][i];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)c[i][j]=b[i][n+1-j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(c[i][j]!=d[i][j]){y=1;break;}if(y==0&&x==1&&g==1&&f==1&&flag==1){cout<<5;return 0;}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)t[i][j]=a[i][n+1-j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)b[i][j]=t[n+1-i][j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)c[i][j]=b[i][n+1-j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(c[i][j]!=d[i][j]){z=1;break;}if(z==0&&y==1&&x==1&&g==1&&f==1&&flag==1){cout<<5;return 0;}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)t[i][j]=a[i][n+1-j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)b[i][j]=t[n+1-i][j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)c[i][j]=b[i][n+1-j];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(c[i][j]!=d[i][j]){p=1;break;}if(p==0&&z==1&&y==1&&x==1&&g==1&&f==1&&flag==1){cout<<5;return 0;}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(a[i][j]!=d[i][j]){h=1;break;}if(h==0&&x==1&&y==1&&z==1&&p==1&&g==1&&f==1&&flag==1){cout<<6;return 0;}if(h==1&&x==1&&y==1&&z==1&&p==1&&g==1&&f==1&&flag==1)cout<<7;return 0; }

转载于:https://www.cnblogs.com/YYC-0304/p/10292831.html

总结

以上是生活随笔为你收集整理的洛谷 P1205 [USACO1.2]方块转换 Transformations的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。