• Codeforces 1136C


    题目链接:https://codeforces.com/problemset/problem/1136/C

    题意:

    给出 $n imes m$ 的矩阵 $A,B$,你可以对其中任意某个 $k imes k$ 的子矩阵进行转置操作。

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

    题解:

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

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

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

    AC代码:

    #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")<<'
    ';
    }
  • 相关阅读:
    安卓开发_浅谈Android动画(三)
    安卓开发_浅谈Android动画(二)
    安卓开发_浅谈Android动画(一)
    Go语言获取系统性能数据gopsutil库
    Go语言标准库之log
    选项模式
    Go语言标准库之template
    Go语言基础之切片
    Go语言基础之反射
    Go语言基础之运算符
  • 原文地址:https://www.cnblogs.com/dilthey/p/10555503.html
Copyright © 2020-2023  润新知