比赛 20191022轻松模拟测试 评测结果 AAAAAAAAAA
题目名称 Rotate Columns 最终得分 100
用户昵称 gsj.cpp 运行时间 0.012 s
代码语言 C++ 内存使用 13.66 MiB
提交时间 2019-10-22 17:29:44
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10-48+ch;ch=getchar();}
	return x*f;
}
const int maxn=105;
int t;
int n,m;
priority_queue<int>q;
struct P
{
	int num,x,y;
}p[7];
void change(int a,int b)
{
	p[a].num=p[b].num;
	p[a].x=p[b].x;
	p[a].y=p[b].y;
}
bool check()
{
	int a1=p[1].y,a2=p[2].y,a3=p[3].y,a4=p[4].y;
	if((a1!=a2&&a1!=a3&&a2!=a3)||(a1!=a2&&a1!=a4&&a2!=a4)||(a1!=a3&&a1!=a4&&a3!=a4)||(a2!=a3&&a2!=a4&&a3!=a4))return 1;
	int b1=p[1].x,b2=p[2].x,b3=p[3].x,b4=p[4].x;
	if(b1==b2&&b1==b3&&b1==b4)return 1;
	if(abs(b1-b2)==1&&abs(b3-b4)==1)return 1;
	if(abs(b1-b3)==1&&abs(b2-b4)==1)return 1;
	if(abs(b1-b4)==1&&abs(b2-b3)==1)return 1;
	if((b1==b2&&b3==b4)||(b1==b3&&b2==b4)||(b1==b4&&b3==b2))return 1;
	return 0;
}
int main()
{
	freopen("happygameT1.in","r",stdin);
	freopen("happygameT1.out","w",stdout);
	t=read();
	while(t--)
	{
		while(!q.empty())q.pop();
		n=read(),m=read();
		if(n<4)
		{
			int x,sum=0;
			for(int i=1;i<=n;i++)
				for(int j=1;j<=m;j++)
				{
					x=read();
					q.push(x);	
				}
			for(int i=1;i<=n;i++)
			{
				sum+=q.top();
				q.pop();
			}
			cout<<sum<<'\n';
			continue;
		}
		else 
		{
			memset(p,0,sizeof(p));
			int x;
			for(int i=1;i<=n;i++)
				for(int j=1;j<=m;j++)
				{
					x=read();
					if(x>p[1].num)
					{
						change(5,4);
						change(4,3);
						change(3,2);
						change(2,1);
						p[1].num=x;
						p[1].x=i;p[1].y=j;
					}
					else if(x>p[2].num)
					{
						change(5,4);
						change(4,3);
						change(3,2);
						p[2].num=x;
						p[2].x=i;p[2].y=j;
					}
					else if(x>p[3].num)
					{
						change(5,4);
						change(4,3);
						p[3].num=x;
						p[3].x=i;p[3].y=j;
					}
					else if(x>p[4].num)
					{
						change(5,4);
						p[4].num=x;
						p[4].x=i;p[4].y=j;
					}
					else if(x>p[5].num)
					{
						p[5].num=x;
						p[5].x=i;p[5].y=j;
					} 
				}
			if(check())
				cout<<p[1].num+p[2].num+p[3].num+p[4].num<<'\n';
			else 
				cout<<p[1].num+p[2].num+p[3].num+p[5].num<<'\n';
		}
	}
	return 0;
}