码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-08-29 23:03:24      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:code   logs   程序   代码   翻译   blog   out   art   题目   

题目描述

一块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:
3
@-@
---
@@-
@-@
@--
--@
输出样例#1:
1

说明

题目翻译来自NOCOW。

USACO Training Section 1.2

 

【分析】

又是模拟..感觉写得有点丑,啊不管了..

 

【代码】

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 int n;
 5 
 6 struct martix {
 7     char m[15][15];
 8 }a, b, c;
 9 bool check(martix a, martix b) {
10     for (int i=1;i<=n;++i)
11         for (int j=1;j<=n;++j)
12             if(a.m[i][j]!=b.m[i][j])
13                 return false;
14     return true;
15 }
16 void change1() {
17     martix now=c;
18     for (int i=1;i<=n;++i)
19         for (int j=1;j<=n;++j)
20             c.m[i][j]=now.m[n-j+1][i];
21 }
22 void change2() {
23     martix now=c;
24     for (int i=1;i<=n;++i)
25         for (int j=1;j<=n;++j)
26             c.m[i][j]=now.m[i][n-j+1];
27 }
28 
29 int main() {
30     cin >> n;
31     for (int i=1;i<=n;++i)
32         for (int j=1;j<=n;++j) cin >> b.m[i][j];
33     for (int i=1;i<=n;++i)
34         for (int j=1;j<=n;++j) cin >> a.m[i][j];
35     c=b;
36     change1();
37     if (check(a, c)) {
38         cout << 1 << endl;
39         return 0;
40     }
41     change1();
42     if (check(a, c)) {
43         cout << 2 << endl;
44         return 0;
45     }
46     change1();
47     if (check(a, c)) {
48         cout << 3 << endl;
49         return 0;
50     }
51     c=b;
52     change2();
53     if (check(a, c)) {
54         cout << 4 << endl;
55         return 0;
56     }
57     for (int i=1;i<=3;++i) {
58         change1();
59         if (check(a, c)) {
60             cout << 5 << endl;
61             return 0;
62         }
63     }
64     if (check(a, b)) {
65         cout << 6 << endl;
66         return 0;
67     }
68     cout << 7 << endl;
69 }

 

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

标签:code   logs   程序   代码   翻译   blog   out   art   题目   

原文地址:http://www.cnblogs.com/shamman/p/7450590.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!