题目是中文题,就不做什么解释了,纯模拟题,主要要搞清楚这几种装换方式下标的变化:

第一种:顺时针旋转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];

第七种:其他

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

  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cstring>
  4. #include <iostream>
  5. using namespace std;
  6. int n;
  7. int type;
  8. char a[][],b[][],c[][];
  9. void input()
  10. {
  11. cin>>n;
  12. int i,j;
  13. getchar();
  14. for(i=; i<=n; i++)
  15. {
  16. for(j=; j<=n; j++)
  17. cin>>a[i][j];
  18. }
  19. for(i=; i<=n; i++)
  20. {
  21. for(j=; j<=n; j++)
  22. cin>>b[i][j];
  23. }
  24. }
  25. void judge()
  26. {
  27. int k;
  28. int flag=;
  29. int i,j;
  30. for(k=; k<=; k++)
  31. {
  32. if(k==)//转90度
  33. {
  34. flag=;
  35. for(i=; i<=n; i++)
  36. {
  37. for(j=; j<=n; j++)
  38. c[j][n-i+]=a[i][j];
  39. }
  40. for(i=; i<=n; i++)
  41. {
  42. for(j=; j<=n; j++)
  43. {
  44. if(c[i][j]!=b[i][j])
  45. {
  46. flag=;
  47. break;
  48. }
  49. }
  50. if(flag)
  51. break;
  52. }
  53. if(i==n+)
  54. {
  55. type=k;
  56. return;
  57. }
  58. }
  59. if(k==)//转180度
  60. {
  61. flag=;
  62. for(i=; i<=n; i++)
  63. {
  64. for(j=; j<=n; j++)
  65. c[n-i+][n-j+]=a[i][j];
  66. }
  67. for(i=; i<=n; i++)
  68. {
  69. for(j=; j<=n; j++)
  70. {
  71. if(c[i][j]!=b[i][j])
  72. {
  73. flag=;
  74. break;
  75. }
  76. }
  77. if(flag)
  78. break;
  79. }
  80. if(i==n+)
  81. {
  82. type=k;
  83. return;
  84. }
  85. }
  86. if(k==)//转270度
  87. {
  88. flag=;
  89. for(i=; i<=n; i++)
  90. {
  91. for(j=; j<=n; j++)
  92. c[i][j]=a[j][n-i+];
  93. }
  94. for(i=; i<=n; i++)
  95. {
  96. for(j=; j<=n; j++)
  97. {
  98. if(c[i][j]!=b[i][j])
  99. {
  100. flag=;
  101. break;
  102. }
  103. }
  104. if(flag)
  105. break;
  106. }
  107. if(i==n+)
  108. {
  109. type=k;
  110. return;
  111. }
  112. }
  113. if(k==)//反射
  114. {
  115. flag=;
  116. for(i=; i<=n; i++)
  117. {
  118. for(j=; j<=n; j++)
  119. c[i][n-j+]=a[i][j];
  120. }
  121. for(i=; i<=n; i++)
  122. {
  123. for(j=; j<=n; j++)
  124. {
  125. if(c[i][j]!=b[i][j])
  126. {
  127. flag=;
  128. break;
  129. }
  130. }
  131. if(flag)
  132. break;
  133. }
  134. if(i==n+)
  135. {
  136. type=k;
  137. return;
  138. }
  139. }
  140. if(k==)//组合
  141. {
  142. flag=;
  143. for(i=; i<=n; i++)
  144. {
  145. for(j=; j<=n; j++)
  146. c[i][n-j+]=a[i][j];
  147. }
  148. for(i=; i<=n; i++)
  149. {
  150. for(j=; j<=n; j++)
  151. a[j][n-i+]=c[i][j];
  152. }
  153. for(i=; i<=n; i++)
  154. {
  155. for(j=; j<=n; j++)
  156. {
  157. if(a[i][j]!=b[i][j])
  158. {
  159. flag=;
  160. break;
  161. }
  162. }
  163. if(flag)
  164. break;
  165. }
  166. if(i==n+)
  167. {
  168. type=k;
  169. return;
  170. }
  171. flag=;
  172. for(i=; i<=n; i++)
  173. {
  174. for(j=; j<=n; j++)
  175. a[n-i+][n-j+]=c[i][j];
  176. }
  177. for(i=; i<=n; i++)
  178. {
  179. for(j=; j<=n; j++)
  180. {
  181. if(a[i][j]!=b[i][j])
  182. {
  183. flag=;
  184. break;
  185. }
  186. }
  187. if(flag)
  188. break;
  189. }
  190. if(i==n+)
  191. {
  192. type=k;
  193. return;
  194. }
  195. flag=;
  196. for(i=; i<=n; i++)
  197. {
  198. for(j=; j<=n; j++)
  199. a[i][j]=c[j][n-i+];
  200. }
  201. for(i=; i<=n; i++)
  202. {
  203. for(j=; j<=n; j++)
  204. {
  205. if(a[i][j]!=b[i][j])
  206. {
  207. flag=;
  208. break;
  209. }
  210. }
  211. if(flag)
  212. break;
  213. }
  214. if(i==n+)
  215. {
  216. type=k;
  217. return;
  218. }
  219. }
  220. if(k==)//不改变
  221. {
  222. flag=;
  223. for(i=; i<=n; i++)
  224. {
  225. for(j=; j<=n; j++)
  226. {
  227. if(a[i][j]!=b[i][j])
  228. {
  229. flag=;
  230. break;
  231. }
  232. }
  233. if(flag)
  234. break;
  235. }
  236. if(i==n+)
  237. {
  238. type=k;
  239. return;
  240. }
  241. }
  242. }
  243. if(k==)//其他
  244. type=k;
  245. }
  246. void output()
  247. {
  248. printf("%d\n",type);
  249. }
  250. int main()
  251. {
  252. input();
  253. judge();
  254. output();
  255. return ;
  256. }

Transformations 方块转换的更多相关文章

  1. Transformations 方块转换 USACO 模拟 数组 数学 耐心

    1006: 1.2.2 Transformations 方块转换 时间限制: 1 Sec  内存限制: 128 MB提交: 10  解决: 7[提交] [状态] [讨论版] [命题人:外部导入] 题目 ...

  2. USACO 1.2.2 Transformations 方块转换

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

  3. 洛谷 Transformations 方块转换

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

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

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

  5. [USACO1.2.2]方块转换 Transformations

    P1205 [USACO1.2]方块转换 Transformations 标签 搜索/枚举 USACO 题目描述 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方 ...

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

    P1205 [USACO1.2]方块转换 Transformations 题目描述 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始 ...

  7. Spark Streaming之六:Transformations 普通的转换操作

    与RDD类似,DStream也提供了自己的一系列操作方法,这些操作可以分成四类: Transformations 普通的转换操作 Window Operations 窗口转换操作 Join Opera ...

  8. USACO Training Section 1.2 [USACO1.2]方块转换 Transformations

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

  9. 【USACO 1.2.2】方块转换

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

随机推荐

  1. java排序方法中的插入排序方法

    插入排序方法就是:将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据. package Array; //插入排序方法 import java.until.Scanner; ...

  2. 面向对象程序设计-C++ Class & Object & Friend Function & Constructor & Destructor【第五次上课笔记】

    大家可以下载后用Vim 或者 Sublime Text等文本编辑器查看 以下代码均已折叠,点击“+“即可打开 一开始老师用C语言大作业的例子,写了个 Student 的结构以及相关操作 #includ ...

  3. POJ 1861 Network (模版kruskal算法)

    Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: Accepted: Special Judge Descripti ...

  4. U+00A0 (Non-breaking space)无法被正确压缩

    Code Glyph Decimal HTML Description #U+00A0     Non-breaking space 0096 https://zh.wikipedia.org/wik ...

  5. 【HTTP 2】启用 HTTP 2(Starting HTTP/2)

    [HTTP 2]启用 HTTP 2(Starting HTTP/2) 四月 1, 2016 ~ LITECODES 前情提要 在上一篇文章<[HTTP 2]HTTP/2 协议概述(HTTP/2 ...

  6. 基于visual Studio2013解决算法导论之046广度优先搜索

     题目 广度优先搜索 解决代码及点评 // 图的邻接表表示.cpp : 定义控制台应用程序的入口点. // #include <iostream> #include <stac ...

  7. Technology_Roadmap

    2016年1月23日 前端技术: - HTML CSS JavaScript JQuery 操作系统: - Linux (CentOS) 数据库: - SQLServer MySQL 开源前端框架: ...

  8. ListBox控件

    主要介绍:自定义数据.绑定数据库数据 前台代码: <div> <asp:ListBox ID=" Width ="100px"> <asp: ...

  9. svn: keywords

    在文件头里面加入下面的关键字: $Date$ $ID$ $Revision$ $Author$ 代码在svn提交时,先选中这几个关键字再提交. Date可能出现中文乱码: 在Control Panel ...

  10. BZOJ 1578: [Usaco2009 Feb]Stock Market 股票市场( 背包dp )

    我们假设每天买完第二天就卖掉( 不卖出也可以看作是卖出后再买入 ), 这样就是变成了一个完全背包问题了, 股票价格为体积, 第二天的股票价格 - 今天股票价格为价值.... 然后就一天一天dp... ...