比赛 20191022轻松模拟测试 评测结果 AAAAAWWWWW
题目名称 Rotate Columns 最终得分 50
用户昵称 wsp 运行时间 0.100 s
代码语言 C++ 内存使用 13.67 MiB
提交时间 2019-10-22 17:29:55
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<iomanip>
using namespace std;
int eve[5][110];
struct date
{
	int val,lie,hang;
	friend bool operator < (date a,date b)
	{
		return a.val<b.val;
	}
};
vector<date>zxc[110];
priority_queue< date >que;
bool used[110];
int sai[6][110];
long long judge(int a,int b)
{
	long long maxx=-9999999;
	for(int i=1;i<=4;i++)
	{
		sai[5][b]=sai[1][b];
		for(int j=1;j<=4;j++)sai[j][b]=sai[j+1][b];
		long long tot=0;
		for(int j=1;j<=4;j++)
		{
			tot+=max(sai[j][b],sai[j][a]);
		}
		maxx=max(tot,maxx);
	}
	return maxx;
}
int main()
{
    freopen("happygameT1.in","r",stdin);
    freopen("happygameT1.out","w",stdout);
	ios::sync_with_stdio(0);
	int t,n,m;cin>>t;
	while(t--)
	{
		cin>>n>>m;
		for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			cin>>eve[i][j];
			que.push((date){eve[i][j],j,i});
		}
		int tot=0;
		if(n<=3)
		{
			for(int i=1;i<=n;i++)
			{
				tot+=que.top().val;
				que.pop();
			}
			while(!que.empty())que.pop();
			cout<<tot<<'\n';
		}
		else
		{
			memset(sai,-0x3f,sizeof(sai));
			int sum=0;
			for(int i=1;i<=3;i++)
			{
				date now=que.top();
				que.pop();tot+=now.val;
				if(!used[now.lie])used[now.lie]=1,++sum;
				zxc[now.lie].push_back(now);
				sai[now.hang][now.lie]=now.val;
			}
			while(!que.empty())
			{
				bool ok=0;
				date now=que.top();
				que.pop();
				if(sum==1||sum==3)
				{
					cout<<tot+now.val<<"\n";
					break;
				}
				if(zxc[now.lie].size()==2||zxc[now.lie].size()==0)
				{
					cout<<tot+now.val<<'\n';
					break;
				}
				zxc[now.lie].push_back(now);
				sai[now.hang][now.lie]=now.val;
				if(!used[now.lie])used[now.lie]=1,++sum;
			//	int qaq,pr=abs(zxc[now.lie][0].hang-now.hang);
				for(int i=1;i<=n;i++)
				{
					if(i!=now.lie&&used[i])
					{
						int ans=judge(now.lie,i);
						if(ans>0)
						{
							cout<<ans<<'\n';
							ok=1;
						}
						break;
					}
				}
				if(ok)break;
			}
			while(!que.empty())que.pop();
			for(int i=1;i<=n;i++)
			{
				used[i]=0;
				zxc[i].clear();
			}
		}
	}
}
/*
6
4 4
9 1 4 3
6 3 5 2
8 8 1 4
2 9 4 1
*/