比赛 |
20191022轻松模拟测试 |
评测结果 |
AAAAAAAAAA |
题目名称 |
Rotate Columns |
最终得分 |
100 |
用户昵称 |
氢氦 |
运行时间 |
0.012 s |
代码语言 |
C++ |
内存使用 |
13.66 MiB |
提交时间 |
2019-10-22 19:34:36 |
显示代码纯文本
#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;
}