USCAO-Section1.2 Transformations
2017-05-30 10:35
295 查看
2017-05-30
题目大意:
一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 1:转90度:图案按顺时针转90度。 2:转180度:图案按顺时针转180度。 3:转270度:图案按顺时针转270度。 4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。 5:组合:图案在水平方向翻转,然后再按照1到3之间的一种再次转换。 6:不改变:原图案不改变。 7:无效转换:无法用以上方法得到新图案。 如果有多种可用的转换方法,请选择序号最小的那个。 只使用1~7中的一个步骤来完成这次转换。
样例输入:
3 @-@ --- @@- @-@ @-- --@
样例输出:
1
题解:
直接求每个变换对应的表达式
代码:
#include<iostream> #include<fstream> #include<cstring> using namespace std; const int N = 15; char ch[N][N] , ch1[N][N]; int num[10]; int n; int flag = false; bool rotation90(char ch[][N],char ch2[] ,int i , int j){ return ch2[i][j] == ch[n - j + 1][i]; } bool rotation180(char ch[][N],char ch2[] ,int i , int j){ return ch2[i][j] == ch[n - i + 1][n - j + 1]; } bool rotation270(char ch[][N],char ch2[] ,int i , int j){ return ch2[i][j] == ch[j][n - i + 1]; } bool reflection(char ch[][N],char ch2[] ,int i , int j){ return ch2[i][j] == ch[i][n - j + 1]; } bool Combination1(char ch[][N],char ch2[] ,int i , int j){ return ch2[i][j] == ch[n - j + 1][n - i + 1]; } bool Combination2(char ch[][N],char ch2[] ,int i , int j){ return ch2[i][j] == ch[n - i + 1][j]; } bool Combination3(char ch[][N],char ch2[] ,int i , int j){ return ch2[i][j] == ch[j][i]; } bool noChange(char ch[][N],char ch2[] ,int i , int j){ return ch2[i][j] == ch[i][j]; } int main(){ ofstream cout("transform.out"); ifstream cin("transform.in"); memset(ch , 0 , sizeof(ch)); memset(ch1 , 0 , sizeof(ch1)); memset(num , 0 , sizeof(10)); cin >> n; for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ cin >> ch[i][j]; } } for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ cin >> ch1[i][j]; if(rotation90(ch,ch1,i,j)){ num[1]++; } if(rotation180(ch,ch1,i,j)){ num[2]++; } if(rotation180(ch,ch1,i,j)){ num[3]++; } if(reflection(ch,ch1,i,j)){ num[4]++; } if(Combination1(ch,ch1,i,j)){ num[5]++; } if(Combination2(ch,ch1,i,j)){ num[7]++; } if(Combination3(ch,ch1,i,j)){ num[8]++; } if(noChange(ch,ch1,i,j)){ num[6]++; } } } // for(int i = 1;i <= 7;i++){ // cout << num[i] << endl; // } for(int i = 1;i < 9;i++){ if(num[i] == n * n && i <= 6){ cout << i << endl; flag = true; break; }else if(num[i] == n * n && (i == 7 || i == 8)){ cout << "5" << endl; flag = true; break; } } if(!flag){ cout << "7" << endl; } return 0; }
相关文章推荐
- USCAO section 1.2 Dual Palindromes
- USCAO-Section 1.2 Name That Number
- USCAO-Section1.2 Milking Cows
- USCAO section 1.1 Transformations
- USCAO section 1.2 Name That Number
- USCAO Section 1.2 Palindromic Squares
- USCAO section 1.1 Transformations
- USCAO section 1.2 Name That Number
- USCAO Section 1.2 Dual Palindromes
- USCAO section1.2 Palindromic Squares
- USCAO section 1.2 Dual Palindromes
- USCAO Section 1.1 Milking Cows
- USCAO section 1.3 Mixing Milk
- USCAO section 1.4 The Clocks
- palsquare-各进制回文数<uscao>1.2
- usaco section1.2 Transformations
- USCAO-Section 1.4 Arithmetic Progressions
- Section 1.2 Transformations
- USCAO Section 1.1 Milking Cows