比赛 |
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
*/