​啦啦啦​

上面是题目链接
这道题,哇,波兰的
好像也就一条有趣的性质就能解决
那就是无论怎么变换
原来在同一行的,变换后还在同一行
原来在同一列的,变换后还在同一列
而且,请注意,元素各不相同!!!
(我一开始没有看见,折腾了一会)
所以我们对于第一个矩阵,记录他的每一个元素的位置
然后读入第二个矩阵的时候判断即可
代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int T,n,m;
int visx[2000005],visy[2000005];
int a[1005][1005];
int b;
const int maxn=1000000;
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
memset(visx,-1,sizeof(visx));
memset(visy,-1,sizeof(visy));
bool jud=true;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%d",&b);
visx[b+maxn]=i;
visy[b+maxn]=j;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%d",&a[i][j]);
if(visx[a[i][j]+maxn]==-1||visy[a[i][j]+maxn]==-1){
jud=false;
}else if(visx[a[i][j]+maxn]!=visx[a[i][0]+maxn]||visy[a[i][j]+maxn]!=visy[a[0][j]+maxn]){
jud=false;
}
}
}
if(jud){
printf("TAK\n");
}else{
printf("NIE\n");
}


}
return 0;
}