USACO-Section 1.2 Transformations [...]
2017-05-28 22:18
435 查看
2017-05-28
题目大意:
给定两个N*N的字符矩阵(1<=N<=10,字符只有’@’或’-‘),定义如下7种变换:
/#1:将矩阵顺时针翻转90度;
/#2:将矩阵顺时针翻转180度;
/#3:将矩阵顺时针翻转270度;
/#4:将矩阵水平翻转;
/#5:先将矩阵水平翻转,再进行#1~#3的任意一次变换;
/#6:没有变换;
/#7:不属于上述任何一种变换。
要求判断第二个矩阵相对于第一个矩阵所做的变换,输出为7个编号中最小的那个。
样例输入:
样例输出:
解题思路:
这个题目没有什么特别的思路,就是规则很多-_-||。个人注意到的有以下几点:
(1)输出为2位:一个数字(1~7),别忘了还有一个回车-_-||
(2)按部就班从编号1到编号6依次判断就好,别想着先判断是否没有变换,因为某些特殊矩阵即使经过1~5的变换看起来还是老样子 -_-||
(3)还有就是注意写判定某种变换的函数时,注意是将前一个矩阵进行对应的变换后与后一个矩阵比较。
代码如下:
题目大意:
给定两个N*N的字符矩阵(1<=N<=10,字符只有’@’或’-‘),定义如下7种变换:
/#1:将矩阵顺时针翻转90度;
/#2:将矩阵顺时针翻转180度;
/#3:将矩阵顺时针翻转270度;
/#4:将矩阵水平翻转;
/#5:先将矩阵水平翻转,再进行#1~#3的任意一次变换;
/#6:没有变换;
/#7:不属于上述任何一种变换。
要求判断第二个矩阵相对于第一个矩阵所做的变换,输出为7个编号中最小的那个。
样例输入:
3 @-@ --- @@- @-@ @-- --@
样例输出:
1
解题思路:
这个题目没有什么特别的思路,就是规则很多-_-||。个人注意到的有以下几点:
(1)输出为2位:一个数字(1~7),别忘了还有一个回车-_-||
(2)按部就班从编号1到编号6依次判断就好,别想着先判断是否没有变换,因为某些特殊矩阵即使经过1~5的变换看起来还是老样子 -_-||
(3)还有就是注意写判定某种变换的函数时,注意是将前一个矩阵进行对应的变换后与后一个矩阵比较。
代码如下:
/* ID: madara01 PROG: transform LANG: C++ */ #include <iostream> #include <fstream> #include <string> #define cin fin #define cout fout #define MAX 10 using namespace std; int N,type = 0; int ini[MAX][MAX]; //初始矩阵 int aft[MAX][MAX]; //变换后的矩阵 void horizon() { int i,j; int mid[MAX][MAX]; for(i = 0; i<N; i++) { for( j = 0; j<N; j++) { mid[i][j] = ini[i][N-j-1]; } } for(i = 0; i<N; i++) { for( j = 0; j<N; j++) { ini[i][j] = mid[i][j]; } } } int Type_1() { //顺时针转90度变换 int i,j; for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { if(aft[i][j] != ini[N-j-1][i]) return -1; } } return 1; } int Type_2() { //顺时针转180度变换 int i,j; for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { if(aft[i][j] != ini[N-i-1][N-j-1]) return -1; } } return 1; } int Type_3() { //顺时针转270度变换 int i,j; for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { if(aft[i][j] != ini[j][N-i-1]) return -1; } } return 1; } int Type_4() { //水平翻转变换 int i,j; for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { if(aft[i][j] != ini[i][N-j-1]) return -1; } } return 1; } int Type_6() { //没有变换 int i,j; for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { if(aft[i][j] != ini[i][j]) return -1; } } return 1; } int judgeType() { //判断为何种变换 if(Type_1() > 0) return 1; if(Type_2() > 0) return 2; if(Type_3() > 0) return 3; if(Type_4() > 0) return 4; horizon(); //将ini做水平翻转变换 if(Type_1() > 0) return 5; if(Type_2() > 0) return 5; if(Type_3() > 0) return 5; horizon(); if(Type_6() > 0) return 6; return 7; } int main(int argc, char **argv) { int i,j; string getIt; ofstream fout ("transform.out"); ifstream fin ("transform.in"); cin >> N; for(i = 0; i < N; i++) { cin >> getIt; for(j = 0; j < N; j++) { if(getIt[j] == '@') ini[i][j] = 0; //当字符为'@'时将二维数组对应位置元素置为0 else ini[i][j] = 1; } } for(i = 0; i < N; i++) { cin >> getIt; for(j = 0; j < N; j++) { if(getIt[j] == '@') aft[i][j] = 0; else aft[i][j] = 1; } } type = judgeType(); cout << type << endl; return 0; }
相关文章推荐
- USACO-Section1.2 Transformations
- USACO - Chapter1 Section 1.2 - Transformations
- USACO-Section1.2 Transformations【数论.矩阵旋转】
- USACO Section1.2 Transformations
- usaco section1.2 Transformations
- USACO Section 1.2 : Transformations
- USACO-Section1.2 Transformations [其他]
- USACO 1.2 Transformations
- USACO Section 1.2: Palindromic Squares
- USACO-Section 1.2 Milking Cows[数组模拟]
- USACO-Section 1.2 Name That Number[...]
- USACO-Section1.2 Palindromic Squares [回文数][进制转换]
- USACO 1.2 Transformations (模拟)
- USACO - Chapter1 Section 1.2 - Milking Cows
- USACO section1.2 Palindromic Squares
- USACO-Section1.2 Name That Number【暴力枚举】【二分查找】
- USACO-Section1.2 Dual Palindromes [回文数][进制转换]
- USACO 1.2 Transformations
- USACO-Section1.2 Palindromic Squares
- USACO 1.2-Transformations