USACO-Section 1.2 Transformations [...]
来源:互联网 发布:hbase mysql元数据 编辑:程序博客网 时间:2024/05/22 21:40
2017-05-28
题目大意:
给定两个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: madara01PROG: transformLANG: C++*/#include <iostream>#include <fstream>#include <string>#define cin fin#define cout fout#define MAX 10using 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;}
阅读全文
0 0
- USACO Section 1.2 Transformations
- USACO Section 1.2 Transformations
- USACO Section 1.2 Transformations
- USACO-Section 1.2 Transformations [...]
- USACO section 1.2.2 Transformations
- USACO Section 1.2.3 Transformations
- USACO Section 1.2.2 Transformations
- USACO Training Section 1.2 Transformations 解题报告&AC代码
- Section 1.2 Transformations
- Section 1.2 Transformations
- Section 1.2 Transformations
- USACO 1.2.2 Transformations
- USACO 1.2-Transformations
- usaco 1.2:Transformations
- USACO 1.2 Transformations
- [USACO 1.2.2] Transformations
- USACO 1.2.2 Transformations
- USACO 1.2.2 Transformations
- php 闭包与匿名函数
- spring事务
- windows10 连接ubuntu14.04远程桌面
- PHP中读取(截取substr)字符串前N个字符或者从第几个字符开始取几个字符
- Windows进程间通信方法总结
- USACO-Section 1.2 Transformations [...]
- Linux-Download tools
- 【zcmu1920】nazime's 友人帐(贪心,树形dp)
- thinkphp整合系列之gulp实现前端自动化
- Linux tail 命令详解
- 判读一棵树是不是平衡二叉树
- mbedtls安装与入门
- Jedis returnResource使用注意事项
- Android 蓝牙模块之应用层之经典蓝牙