CF1772B Matrix Rotation

CF1772B Matrix Rotation

题目传送门

我们定义一个“优秀”的矩阵当他满足以下特点:

  • 在每行中,第一个元素总小于第二个元素。

  • 在每列中,第一个元素总小于第二个元素。

现在给你一个 2×22\times 2 的矩阵,每次可以旋转 9090^\circ,请问一直旋转,看是否有一种情况满足他是一个“优秀”得矩阵?

不难发现,旋转 360360^\circ这个矩阵就变得和原来一样了。因为他是 2×22\times 2 的,数据较小,我们可以对这个矩阵手动进行三次翻转,对于每一次翻转,也就是,我们把四个数依次拿出来,记为 a,b,c,da,b,c,d。旋转 9090^\circ,放在图中就是:

原来:[abcd]\begin{bmatrix}a&b\\c&d\end{bmatrix}

旋转 9090^\circ[cabd]\begin{bmatrix}c&a\\b&d\end{bmatrix}

按照上述方法进行旋转即可。

CodeCode

#include<bits/stdc++.h>
using namespace std;
const int N =300;
int a[N][N];
bool check()
{
	if(((a[1][1]<a[1][2])&&(a[2][1]<a[2][2]))&&((a[1][1]<a[2][1])&&(a[1][2]<a[2][2])))
		return true;
	else
		return false;
}
void Slove()
{
	int x1=a[1][1],x2=a[1][2],x3=a[2][1],x4=a[2][2];
	a[1][2]=x1,a[1][1]=x3,a[2][1]=x4,a[2][2]=x2;
}
int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	int t;
	cin>>t;
	while(t--)
	{
		cin>>a[1][1]>>a[1][2]>>a[2][1]>>a[2][2];
		if(check())
		{
			cout<<"YES"<<endl;
			continue;
		}
		Slove();
		if(check())
		{
			cout<<"YES"<<endl;
			continue;
		}
		Slove();
		if(check())
		{
			cout<<"YES"<<endl;
			continue;
		}
		Slove();
		if(check())
		{
			cout<<"YES"<<endl;
			continue;
		}
		cout<<"NO"<<endl; 
	}
	return 0;
}
posted @ 2022-12-20 08:21  June_Failure  阅读(10)  评论(0)    收藏  举报  来源