C. Nastya Is Transposing Matrices

链接

[https://codeforces.com/contest/1136/problem/C]

题意

给你两个规模一样的矩阵
问是否可以通过不断选取A矩阵的子“方正”转置得到B矩阵

分析

明确一点,那些i+j相等的位置一定是在某个子方正的斜对角上(右上往左下画线就知道),
而且这个斜对角的任意两个元素是一定可以通过一些转置互换,而且其他位置不变。
自己拿几个矩阵模拟就知道了
后面只需要对每个i+j相等的排序对比两个矩阵的就OK了

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	//freopen("in.txt","r",stdin);
	int n,m;
	while(cin>>n>>m){
		vector<int> v1[2*510],v2[2*510];
		int x;
		for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			cin>>x;
			v1[i+j].push_back(x);
		}
		for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			cin>>x;
			v2[i+j].push_back(x);
		}
		for(int i=0;i<m+n;i++)
		{
			sort(v1[i].begin(),v1[i].end());
			sort(v2[i].begin(),v2[i].end());
		}
		bool flag=1;
		for(int i=0;i<m+n;i++)
			if(v1[i]!=v2[i]){
				flag=0;
				break;
			}
			if(flag) cout<<"YES\n";
			else cout<<"NO\n";
	}
	return 0;
} 
posted @ 2019-03-12 17:44  ChunhaoMo  阅读(280)  评论(0)    收藏  举报