洛谷P3492 [POI2009]TAB-Arrays

@Pelom  October 12, 2021

题意

给出两$n \times m$的矩阵,保证每个矩阵内元素互不相同且权值均在$[-10^6,10^6]$之间,请能否把其中一个矩阵通过若干次交换两行或者交换两列的操作变成另外一个矩阵

数据范围:$1\le n,m \le 1000$

题解

结论:任何一行/列中的元素不会变
暴力判断即可

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1000+10;
const int D=1e6;
int t,n,m;
int a[N][N],b;
int x[D<<1],y[D<<1];
int main(){
    scanf("%d",&t);
    for(;t--;){
        bool f=1;
        memset(x,0,sizeof(x));
        memset(y,0,sizeof(y));
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                scanf("%d",&b);
                x[b+D]=i;
                y[b+D]=j;
            }
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                scanf("%d",&a[i][j]);
                if(x[a[i][j]+D]!=x[a[i][1]+D] || y[a[i][j]+D]!=y[a[1][j]+D]  || !x[a[i][j]+D] || !y[a[i][j]+D])
                    f=0;
            }
        if(!f)
            puts("NIE");
        else puts("TAK");
    }
    return 0;
}

添加新评论