제출 #1139091

#제출 시각아이디문제언어결과실행 시간메모리
1139091beabossTeam Contest (JOI22_team)C++20
100 / 100
282 ms23336 KiB


#include "bits/stdc++.h"

using namespace std;

#define s second
#define f first
#define pb push_back

typedef long long ll;

typedef pair<int, int> pii;
typedef vector<pii> vpii;

typedef vector<int> vi;

#define FOR(i, a, b) for (int i = (a); i<b; i++)

bool ckmin(int& a, int b){ return b < a ? a = b, true : false; }

bool ckmax(int& a, int b){ return b > a ? a = b, true : false; }


const int N = 15e4 + 10;
int a[N], b[N], c[N];
set<pii> x, y, z; 

void delet(int i) {
	x.erase({a[i], i});
	y.erase({b[i], i});
	z.erase({c[i], i});
}


int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n;
	cin >> n;

	FOR(i, 0, n) {
		cin >> a[i] >> b[i] >> c[i];
		a[i] = -a[i];
		b[i] = -b[i];
		c[i] = -c[i];

		x.insert({a[i], i});
		y.insert({b[i], i});
		z.insert({c[i], i});
	}

	int res = -1;

	while (x.size()) {
		vi inds = {(*x.begin()).s, (*y.begin()).s, (*z.begin()).s};
		vi mn = {0, 0, 0};

		bool chg=false;
		FOR(ind, 0, 3) {
			ckmin(mn[0], a[inds[ind]]);
			ckmin(mn[1], b[inds[ind]]);
			ckmin(mn[2], c[inds[ind]]);
		}
		for (auto ind: inds) {
			int cnt = (a[ind] == mn[0]) + (b[ind] == mn[1]) + (c[ind] == mn[2]);
			if (cnt > 1) {
				chg=true;
				delet(ind);
				break;
			}
		}
			
		if (!chg)break;
	}
	if (x.size()) res = -(*x.begin()).f - (*y.begin()).f - (*z.begin()).f;
	cout << res << endl;




	



}












#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...