C - Nastya Is Transposing Matrices CodeForces - 1136C

C. Nastya Is Transposing Matrices
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
Nastya came to her informatics lesson, and her teacher who is, by the way, a little bit famous here gave her the following task.

Two matrices A and B are given, each of them has size n×m. Nastya can perform the following operation to matrix A unlimited number of times:

take any square square submatrix of A and transpose it (i.e. the element of the submatrix which was in the i-th row and j-th column of the submatrix will be in the j-th row and i-th column after transposing, and the transposed submatrix itself will keep its place in the matrix A).
Nastya’s task is to check whether it is possible to transform the matrix A to the matrix B.

Example of the operation
As it may require a lot of operations, you are asked to answer this question for Nastya.

A square submatrix of matrix M is a matrix which consist of all elements which comes from one of the rows with indeces x,x+1,…,x+k−1 of matrix M and comes from one of the columns with indeces y,y+1,…,y+k−1 of matrix M. k is the size of square submatrix. In other words, square submatrix is the set of elements of source matrix which form a solid square (i.e. without holes).

Input
The first line contains two integers n and m separated by space (1≤n,m≤500) — the numbers of rows and columns in A and B respectively.

Each of the next n lines contains m integers, the j-th number in the i-th of these lines denotes the j-th element of the i-th row of the matrix A (1≤Aij≤109).

Each of the next n lines contains m integers, the j-th number in the i-th of these lines denotes the j-th element of the i-th row of the matrix B (1≤Bij≤109).

Output
Print “YES” (without quotes) if it is possible to transform A to B and “NO” (without quotes) otherwise.

You can print each letter in any case (upper or lower).

Examples
inputCopy
2 2
1 1
6 1
1 6
1 1
outputCopy
YES
inputCopy
2 2
4 4
4 5
5 4
4 4
outputCopy
NO
inputCopy
3 3
1 2 3
4 5 6
7 8 9
1 4 7
2 5 6
3 8 9
outputCopy
YES
题意:输入n,m,代表一个nm的矩阵,接下来输入两个矩阵a与b,都是nm规格,问你a可不可以通过将他的子矩阵行列互换,变为和b矩阵一模一样。

思路:可以发现将它的子矩阵旋转,对角线上的数永远都不改变,改变的只是这几个数的位置,所以就可以判断a,b矩阵对角线上的值是否是同样的就可以了

#include<bits/stdc++.h>
#define LL long long
#define Max 505
#define Mod 1e9+7
const LL mod=1e9+7;
const LL inf=0x3f3f3f3f;
using namespace std;
int a[Max][Max],b[Max][Max];
priority_queue<int>ca,cb;
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            scanf("%d",&a[i][j]);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            scanf("%d",&b[i][j]);
    int li=0,ji=0;
    while(li<n && ji<m){
        int i=li,j=ji;
        while((i>=0 && i<n) && (j>=0 && j<m)){
           // printf("%d %d %d %d\n",i,j,a[i][j],b[i][j]);
            ca.push(a[i][j]);
            cb.push(b[i][j]);
            i=i-1;
            j=j+1;
        }
        while(ca.size() && cb.size()){
            int ta,tb;
            ta=ca.top();
            tb=cb.top();
            if(ta!=tb){
                printf("NO\n");
                return 0;
            }
            ca.pop();
            cb.pop();
        }
        if(li<n-1)
            li++;
        else
            ji++;
    }
    printf("YES\n");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Gee_Zer/article/details/89154940