这个题算是找规律吧,你只要相信通过[i,j]和[j,i]交换有限次必定能得到所有符合题意的矩阵这个结论,那么直接判断两个矩阵对应位置是否相等就行了。
这里唯一需要处理的就是n和m不一定相等,所以我们可以把两个矩阵线性化,再去判断。
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
#include <stack>
#include <iomanip>
#include <string>
using namespace std;
const int maxn=505;
int n,m;
int a[maxn][maxn],b[maxn][maxn];
map<int,int> mp[2*maxn];
int main(){
scanf("%d%d",&n,&m);
int flag=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
scanf("%d",&a[i][j]);
mp[i+j][a[i][j]]++;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
scanf("%d",&b[i][j]);
mp[i+j][b[i][j]]--;
if(mp[i+j][b[i][j]]<0) flag=1;
}
if(flag) printf("NO\n");
else printf("YES\n");
return 0;
}