| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1282608 | duyanhchupapi | Team Contest (JOI22_team) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
using ll = long long;
const int N = 150005;
int n, inf = 1e9;
struct kid {
int x,y,z,id;
} X[N], Y[N], Z[N];
bool used[N];
bool ok(int i,int j,int k) {
if(X[i].id == Y[j].id || Y[j].id == Z[k].id|| Z[k].id == X[i].id) return false;
if(X[i].x <= max(Y[j].x, Z[k].x)) return false;
if(Y[j].y <= max(X[i].y, Z[k].y)) return false;
if(Z[k].z <= max(X[i].z, Y[j].z)) return false;
return true;
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n;
for(int i=1;i<=n;++i) {
int x,y,z;
cin >> x >> y >> z;
X[i] = {x,y,z,i};
Y[i] = {x,y,z,i};
Z[i] = {x,y,z,i};
}
sort(X+1,X+n+1, [&](kid p1, kid p2) {return p1.x < p2.x;});
sort(Y+1,Y+n+1, [&](kid p1, kid p2) {return p1.y < p2.y;});
sort(Z+1,Z+n+1, [&](kid p1, kid p2) {return p1.z < p2.z;});
int i = n, j = n, k = n;
while(i && j && k) {
if(ok(i,j,k)) {
cout << X[i].x + Y[j].y + Z[k].z; return 0;
}
if(X[i].y == Y[j].y || X[i].z == Z[k].z)) used[X[i].id] = 1;
if(X[i].x == Y[j].x || Y[j].z == Z[k].z)) used[Y[j].id] = 1;
if(X[i].x == Z[k].x || Y[j].y == Z[k].y)) used[Z[k].id] = 1;
while(used[X[i].id]) --i;
while(used[Y[j].id]) --j;
while(used[Z[k].id]) --k;
}
cout << -1;
return 0;
}
