Nastya Is Transposing Matrices ( CodeForces 1136C )

欢迎访问https://blog.csdn.net/lxt_Lucia~~

宇宙第一小仙女\(^o^)/~~萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗~~ 

 

----------------------------------------我只是一条可爱哒分界线-------------------------------------------

 

一、问题:

Description

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.

Nastya Is Transposing Matrices ( CodeForces 1136C )_第1张图片

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 nn and mm separated by space (1 ≤ n,m ≤ 500) — the numbers of rows and columns in A and B respectively.

Each of the next nn lines contains mm 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 ≤ 1e9).

Each of the next nn lines contains mm 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 ≤ 1e9).

 

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).

 

Sample Input

2 2
1 1
6 1
1 6
1 1

Sample Output

YES

 

Sample Input

2 2
4 4
4 5
5 4
4 4

Sample Output

NO

 

Sample Input

3 3
1 2 3
4 5 6
7 8 9
1 4 7
2 5 6
3 8 9

Sample Output

YES

 

HINT

Nastya Is Transposing Matrices ( CodeForces 1136C )_第2张图片

 

二、题意:

给出两个 n×m 的矩阵 A,B,你可以对A矩的 k×k 的子矩阵进行转置操作,操作可进行任意次。

问:是否能将 A 变成 B,可以则输出YES,反之输出NO。

 

三、思路:

不论如何转置,A矩阵的任意一条反对角线上的元素构成的集合,都是不变的。

我们可以每次都选取 2×2 的子矩阵进行转置,必然能将任意一条反对角线上的任意两个相邻的元素交换位置,而只要能随意交换相邻元素,任意一个序列就可以变成任意的另一个序列。

因此对于A, B两矩阵,只要满足任意一条反对角线上的它们的元素构成的集合相同,就能从 A 变成 B。

 

四、代码:

#include 
#include 
#include 
#define mem(a,b) memset(a,b,sizeof(a))
#define fori(a,b) for(int i=a; i<=b; i++)
#define forj(a,b) for(int j=a; j<=b; j++)

using namespace std;
typedef long long ll;

int main()
{
    int n, m;
    map  mp[1010];
    bool flag = false;
    int a[505][505], b[505][505];
    scanf("%d %d", &n, &m);
    fori(1, n)
    {
        forj(1, m)
        {
            scanf("%d", &a[i][j]);
            mp[i+j][a[i][j]]++;
        }
    }
    fori(1, n)
        forj(1, m)
            scanf("%d", &b[i][j]);
    fori(1, n)
    {
        forj(1, m)
        {
            if(mp[i+j][b[i][j]] <= 0)
            {
                flag = true;
                break;
            }
            mp[i+j][b[i][j]]--;
        }
    }
    if(flag)
        printf("NO\n");
    else
        printf("YES\n");
    return 0;
}

 

------------------------------------------我也是有底线的----------------------------------------------------

 

欢迎访问https://blog.csdn.net/lxt_Lucia~~

宇宙第一小仙女\(^o^)/~~萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗~~

你可能感兴趣的:(spiny)