zoukankan      html  css  js  c++  java
  • Codeforces Round #546 (Div. 2) C Nastya Is Transposing Matrices

      题意是给矩阵a和矩阵b,问能否把a矩阵里的k*k子矩阵转置,得到b矩阵,转置意思就是k*k的子矩阵里,a[i][j]和a[j][i]互换位置。

     在纸上画几组样例,就可以观察发现,我们可以通过每次只对2*2的子矩阵进行转置,就能将一条对角线的任意一个元素放在该对角线的任意位置,也就是一条对角线里的元素是可以互相交换的,所以我们只需要把所有a和b矩阵的所有对角线都找出来,一条条对比即可。

    #include<bits/stdc++.h>
    using namespace std;
    int a[505][505],b[505][505];
    int vis[505][505];
    vector<int>v1[1000],v2[1000];
    int main()
    {
        int n,m,cnt=0;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                scanf("%d",&(a[i][j]));
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                scanf("%d",&(b[i][j]));
    
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                if(!vis[i][j])
                {
                    cnt++;
                    int v=i,k=j;
                    for(;v<=n&&k>=1;v++,k--)
                    {
                        vis[v][k]=1;
                        v1[cnt].push_back(a[v][k]);
                    }
                }
            }
        int tmp=0;
        memset(vis,0,sizeof(vis));
          for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                if(!vis[i][j])
                {
                    tmp++;
                    int v=i,k=j;
                    for(;v<=n&&k>=1;v++,k--)
                    {
                        vis[v][k]=1;
                        v2[tmp].push_back(b[v][k]);
                    }
                }
            }
            for(int i=1;i<=cnt;i++)
            {
                sort(v1[i].begin(),v1[i].end());
                sort(v2[i].begin(),v2[i].end());
                int sz=v1[i].size();
                for(int j=0;j<sz;j++)
                    if(v1[i][j]!=v2[i][j])
                    {
                        cout<<"NO"<<endl;
                        return 0;
                    }
            }
            cout<<"YES"<<endl;
    
    }
  • 相关阅读:
    Qt中widget重新setParent需要注意的问题
    在有状态机下,写自动测试需要注意的问题
    C#获取当前路径的7种方法
    VS快捷键大全
    [WPF]设置背景色
    [WPF]建立自适应窗口大小布局的WinForm窗口
    [WPF]Slider控件常用方法
    [C#.NET]
    VB中的API详解
    VB6.0和VB.Net的函数等对照表
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754791.html
Copyright © 2011-2022 走看看