标签: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之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法。
3 @-@ --- @@- @-@ @-- --@
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