方块转换 transform

方块转换 transform

【题目描述】:

一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。

写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:

#1:转90 度:图案按顺时针转90 度.

#2:转180 度:图案按顺时针转180 度.

#3:转270 度:图案按顺时针转270 度.

#4:反射:图案在水平方向翻转(形成原图案的镜像).

#5:组合:图案在水平方向翻转,然后按照#1-#3 之一转换.

#6:不改变:原图案不改变.

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

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

【输入描述】:

第一行: 单独的一个整数N.

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

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

【输出描述】:

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


【样例输入】


【样例输出】


3

@[email protected]

---

@@-

@[email protected]

@--

[email protected]


1

【数据范围及描述】:

模拟!模拟!

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <algorithm>
  5 using namespace std;
  6
  7 const int maxn=13;
  8 int N;
  9 char s[maxn][maxn];
 10 char e[maxn][maxn];
 11 char o[maxn][maxn];
 12
 13 bool check()
 14 {
 15     int i,j;
 16     for(i=1;i<=N;i++)
 17         for(j=1;j<=N;j++)
 18             if(o[i][j]!=e[i][j]) return false;
 19     return true;
 20 }
 21
 22 bool _1(char p[][maxn])
 23 {
 24     int i,j,x,y;
 25     for(i=1;i<=N;i++)
 26         for(j=1;j<=N;j++)
 27         {
 28             y=N+1-i;
 29             x=j;
 30             o[x][y]=p[i][j];
 31         }
 32     return check();
 33 }
 34
 35 bool _2()
 36 {
 37     _1(s);
 38     char tmp[maxn][maxn];
 39     for(int i=1;i<=N;i++)
 40         for(int j=1;j<=N;j++)
 41             tmp[i][j]=o[i][j];
 42     return _1(tmp);
 43 }
 44
 45 bool _3()
 46 {
 47     _2();
 48     char tmp[maxn][maxn];
 49     for(int i=1;i<=N;i++)
 50         for(int j=1;j<=N;j++)
 51             tmp[i][j]=o[i][j];
 52     return _1(tmp);
 53 }
 54
 55 bool _4()
 56 {
 57     int i,j,x,y;
 58     for(i=1;i<=N;i++)
 59         for(j=1;j<=N;j++)
 60         {
 61             x=i;
 62             y=N+1-j;
 63             o[x][y]=s[i][j];
 64         }
 65     return check();
 66 }
 67
 68 bool _5()
 69 {
 70     _4();
 71     char tmp[maxn][maxn];
 72     for(int i=1;i<=N;i++)
 73         for(int j=1;j<=N;j++)
 74             tmp[i][j]=o[i][j];
 75     if(_1(tmp)) return true;
 76     else
 77     {
 78         for(int i=1;i<=N;i++)
 79             for(int j=1;j<=N;j++)
 80                 tmp[i][j]=o[i][j];
 81         if(_1(tmp)) return true;
 82         else
 83         {
 84             for(int i=1;i<=N;i++)
 85                 for(int j=1;j<=N;j++)
 86                     tmp[i][j]=o[i][j];
 87             if(_1(tmp)) return true;
 88         }
 89     }
 90     return false;
 91 }
 92
 93 bool _6()
 94 {
 95     for(int i=1;i<=N;i++)
 96         for(int j=1;j<=N;j++)
 97             if(s[i][j]!=e[i][j]) return false;
 98     return true;
 99 }
100
101 int main()
102 {
103     scanf("%d\n",&N);
104     for(int i=1;i<=N;i++)
105         gets(s[i]+1);
106     for(int i=1;i<=N;i++)
107         gets(e[i]+1);
108     int ans;
109     if(_1(s)) ans=1;
110     else if(_2()) ans=2;
111     else if(_3()) ans=3;
112     else if(_4()) ans=4;
113     else if(_5()) ans=5;
114     else if(_6()) ans=6;
115     else ans=7;
116     printf("%d",ans);
117     return 0;
118 }

时间: 2024-08-25 02:44:18

方块转换 transform的相关文章

【USACO 1.2.2】方块转换

[问题描述] 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 1:转90度:图案按顺时针转90度. 2:转180度:图案按顺时针转180度. 3:转270度:图案按顺时针转270度. 4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像). 5:组合:图案在水平方向翻转,然后再按照1到3之间的一种再次转换. 6:不改变:原图案不改变. 7:无效转换:无法用以上方法得到新图案. 如

CSS3 转换(Transform)

转换 transform 能够对元素进行移动.缩放.转动.拉长或拉伸 在CSS中,允许元素实现 2D 和 3D的转换效果,主要包含 :旋转,缩放,移动,倾斜 2D :元素只能在X轴和Y轴平面上发生变化 3D :元素还可以在 Z轴上发生变化 取值: none:无转换 2D Transform Functions: matrix(): 以一个含六值的(a,b,c,d,e,f)变换矩阵的形式指定一个2D变换,相当于直接应用一个[a,b,c,d,e,f]变换矩阵 translate(): 指定对象的2D

方块转换

1387 方块转换 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题目描述 Description 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:#1:转90度:图案按顺时针转90度.#2:转180度:图案按顺时针转180度.#3:转270度:图案按顺时针转270度.#4:反射:图案在水平方向翻转(形成原图案的镜像).#5:组合:图案在水平

【USACO1.2_2】★Transformations 方块转换

一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案依照下面列转换方法转换成新图案的最小方式: 1:转90度:图案按顺时针转90度. 2:转180度:图案按顺时针转180度. 3:转270度:图案按顺时针转270度. 4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像). 5:组合:图案在水平方向翻转,然后再依照1到3之间的一种再次转换. 6:不改变:原图案不改变. 7:无效转换:无法用以上方法得到新图案. 假设有多种可用的

元素转换-Transform

所谓元素转换,其实就是对元素的坐标在二维或三维空间上做矩阵换算.根据换算的结果,又分成了多种转换类型.但无论是哪一种,都不影响元素在页面上的物理空间,只改变元素的视觉效果.也就是说,比如元素缩放.旋转都不影响周围其他元素的布局.有些开发者喜欢用平移做元素居中效果,其实非常不妥,因为元素原来的物理空间还在那里,控制起来不轻松. 另外,转换属性(transform)只有一个,因此,转换类型不能叠加.也就是说,如果之前做了旋转(rotate),如果再做平移(translate),旋转效果就会消失.如果

0063 2D 转换transform之 scale

scale 的作用 用来控制元素的放大与缩小 语法 transform: scale(x, y) 知识要点 注意,x 与 y 之间使用逗号进行分隔 transform: scale(1, 1): 宽高都放大一倍,相当于没有放大 transform: scale(2, 2): 宽和高都放大了二倍 transform: scale(2): 如果只写了一个参数,第二个参数就和第一个参数一致 transform:scale(0.5, 0.5): 缩小 scale 最大的优势:可以设置转换中心点缩放,默认

洛谷 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:无效转换:无法用以上方法得到新图案. 如果有

CSS3 3D转换transform

3D: 脱离文档流,平均角度,按z轴即垂直div往外,各自推送相同的距离 1.perspective的作用? 使具有3D效应的元素,产生透视效果,若没有透视效果,你看到的只是2维的平面 2.perspective-3d的作用? 规定了子元素是看起来位于3维空间,还是在2维平面 当只有perspective时,很容易产生一些奇怪的透视3维平面,即其子元素应该是3维的透视到此父元素的平面上,但由于没有perspective-3d则会在其上平面化显示,即有独立的3维空间但显示确偏2维,而只有persp

Transformations 方块转换

题目是中文题,就不做什么解释了,纯模拟题,主要要搞清楚这几种装换方式下标的变化: 第一种:顺时针旋转90度: c[j][n-i+1]=a[i][j]; 第二种:旋转180度: c[n-i+1][n-j+1]=a[i][j]; 第三种:顺时针旋转270度: c[i][j]=a[j][n-i+1]; 第四种:反射 c[i][n-j+1]=a[i][j]; 第五种:组合 先反射:c[i][n-j+1]=a[i][j]; 然后再按照1到3之间的一种再次转换. 第六种:不改变 c[i][j]=a[i][j