Codeforces 1136C - Nastya Is Transposing Matrices

题目连接:https://codeforces.com/problemset/problem/1136/Cios

 

题意:c++

给出 $n \times m$ 的矩阵 $A,B$,你能够对其中任意某个 $k \times k$ 的子矩阵进行转置操做。spa

问你是否能将 $A$ 变成 $B$。code

 

题解:blog

无论咱们如何进行转置,不难发现整个矩阵的任意一条反对角线上的元素构成的集合,都是不会变的。ci

而咱们能够进一步得出结论,对于 $A,B$ 两个矩阵,只要知足任意一条反对角线上的它们的元素构成的集合相同,就能从 $A$ 变成 $B$。get

这也很好证实,由于只要我每次都选取 $2 \times 2$ 的子矩阵进行转置,必然能将任意一条反对角线上的任意两个相邻的元素交换位置,而只要能随意交换相邻元素,任意一个序列就能够变成任意的另外一个序列。it

 

AC代码:io

#include<bits/stdc++.h>
using namespace std;
const int K=503;
int n,m;
vector<int> a[2*K],b[2*K];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);

    cin>>n>>m;
    for(int i=1,x;i<=n;i++) for(int j=1;j<=m;j++) cin>>x, a[i+j].push_back(x);
    for(int i=1,x;i<=n;i++) for(int j=1;j<=m;j++) cin>>x, b[i+j].push_back(x);

    bool ok=1;
    for(int k=2;k<=n+m;k++)
    {
        sort(a[k].begin(),a[k].end());
        sort(b[k].begin(),b[k].end());
        for(int i=0;i<a[k].size();i++) if(a[k][i]!=b[k][i]) ok=0;
    }
    cout<<(ok?"YES":"NO")<<'\n';
}
相关文章
相关标签/搜索