【Codeforces】1136C Nastya Is Transposing Matrices (矩阵转置)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/88523449

http://codeforces.com/contest/1136/problem/C

第一个矩阵可否通过转置,变换成第二个矩阵,可以的话输出“YES”,不可以的话,输出“NO”

转置之后,对角线元素是不变的

用map,或者vector 都可以

#include <iostream>
#include <map>
#include <cstdio>

using namespace std;

const int maxn = 505;

int a[maxn][maxn];
int b[maxn][maxn];

map<int,int> mp[2*maxn];
int main ()
{
	int i,j,n,m;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			scanf("%d",&a[i][j]);
			mp[i+j][a[i][j]]++;
		}
	}
	int flag=1;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			scanf("%d",&b[i][j]);
			if(mp[i+j][b[i][j]]<=0)
			{
				flag=0;
				break; 
			} 
			mp[i+j][b[i][j]]--;
		}
	}
	if(flag)
		printf("YES");
	else
		printf("NO");
	return 0;
} 
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

const int maxn = 505;

int main() {
    
    ios_base::sync_with_stdio(0);
    cin.tie(0);
	
	int n, m, i, j;
	cin>>n>>m;
	
	vector<int> a[2*maxn], b[2*maxn];
	for(i=1;i<=n;i++)
	{
	    for(j=1;j<=m;j++)
	    {
	        int test;
	        cin>>test;
	        a[i+j].push_back(test);
	        
	    }  
	}
	for(i=1;i<=n;i++)
	{
	    for(j=1;j<=m;j++)
	    {
	        int test;
	        cin>>test;
	        b[i+j].push_back(test);
	        
	    }   
	}
	for(i=1;i<=n+m;i++)
	{
		sort(a[i].begin(),a[i].end());
		sort(b[i].begin(),b[i].end());
	}
	int flag=0;
	for(i=1;i<=n+m;i++)
	{
		if(a[i]!=b[i])
		{
			flag = 1;
			break;
		}
	}
	if(flag)
		cout << "NO";
	else
		cout << "YES";
	   
	return 0;
}

判断两个vector 相等

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main ()
{
	vector<int> v1,v2;
	vector<int>::iterator it;
	v1.push_back(1);
	v1.push_back(3);
	v1.push_back(100);
	v2.push_back(100);
	v2.push_back(1);
	v2.push_back(3);
	for(it=v1.begin();it!=v1.end();it++)
	{
		cout << *it  << " ";
	}
	cout << endl;
	for(it=v2.begin();it!=v2.end();it++)
	{
		cout << *it << " ";
	}
	cout << endl;
	//sort(v1.begin(),v1.end());
	//sort(v2.begin(),v2.end());
	//没有sort之前,输出NO
	//sort之后,输出YES 
	if(v1==v2)
		cout << "YES";
	else
		cout << "NO";
	return 0;
}

猜你喜欢

转载自blog.csdn.net/CSDN___CSDN/article/details/88523449