Matrix

矩阵模拟 / Matrix

问题描述

给出 2 个大小相同的矩阵方阵 A 和 B,方阵中的元素为 0 或 1。若 A 和 B 相似,则它们满足下面条件:

情况 输出
A=B 0
A 经过顺时针旋转 90° 成为 B 1
A 经过顺时针旋转 180° 成为 B 2
A 经过顺时针旋转 270° 成为 B 3
A, B 不相似 -1

输入格式

第一行为一个整数 n;
接下来的 n 行表示 A 矩阵的 01 方阵;
再接下来的 n 行表示 B 矩阵的 01 方阵。

输出格式

一个整数(0,或 1,或 2,或 3,或 -1)即 A, B 相似的结果。

数据样例

matrix.in matrix.out
4 1
0 0 0 0
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0

数据范围

100%的数据:1≤n≤20。

我的渣题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <cmath>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int n;
int a[25][25],
a90[25][25],
a180[25][25],
a270[25][25],
b[25][25];

int main() {
freopen("matrix.in", "r", stdin);
freopen("matrix.out", "w", stdout);
scanf("%d", &n);
int tmp;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
scanf("%d", &tmp);
a[i][j] = tmp;
a90[j][n - i + 1] = tmp;
a180[n - i + 1][n - j + 1] = tmp;
a270[n - j + 1][i] = tmp;
}
}
bool equal = true,
equal90 = true,
equal180 = true,
equal270 = true;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
scanf("%d", &tmp);
if (a[i][j] != tmp) equal = false;
if (a90[i][j] != tmp) equal90 = false;
if (a180[i][j] != tmp) equal180 = false;
if (a270[i][j] != tmp) equal270 = false;
}
}
if (equal) {
printf("0\n");
} else if (equal90) {
printf("1\n");
} else if (equal180) {
printf("2\n");
} else if (equal270) {
printf("3\n");
} else {
printf("-1\n");
}
return 0;
}