제출 #861954

#제출 시각아이디문제언어결과실행 시간메모리
861954rog1gorTeam Contest (JOI22_team)C++14
100 / 100
82 ms7720 KiB
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

struct bober {
	int x[3];
	int num;
};

int n, indexSort=0, ix = 0, iy = 0, iz  = 0;
bool tab[150010];
bober tx[150010], ty[150010], tz[150010];

bool sortuj(bober& a, bober& b) {
	return a.x[indexSort] > b.x[indexSort];
}

int main() {
	cin.tie(0);
	ios_base::sync_with_stdio(0);
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> tx[i].x[0] >> tx[i].x[1] >> tx[i].x[2];
		tx[i].num = i;
		ty[i] = tx[i];
		tz[i] = tx[i];
	}
	sort(tx, tx + n, sortuj);
	indexSort++;
	sort(ty, ty + n, sortuj);
	indexSort++;
	sort(tz, tz + n, sortuj);
	while (ix < n && iy < n && iz < n) {
		int maxx = tx[ix].x[0];
		int maxy = ty[iy].x[1];
		int maxz = tz[iz].x[2];
		//cout << tx[ix].num << ' ' << ty[iy].num << ' ' << tz[iz].num << " : " << maxx << ' ' << maxy << ' ' << maxz << '\n';
		if (tx[ix].x[1]==maxy||tx[ix].x[2]==maxz) {
			tab[tx[ix].num] = true;
			ix++;
		}
		else if (ty[iy].x[0] == maxx || ty[iy].x[2] == maxz) {
			tab[ty[iy].num] = true;
			iy++;
		}
		else if (tz[iz].x[1] == maxy || tz[iz].x[0] == maxx) {
			tab[tz[iz].num] = true;
			iz++;
		}
		else {
			cout << maxx + maxy + maxz << '\n';
			return 0;
		}
		while (ix < n && tab[tx[ix].num] == true) ix++;
		while (iy < n && tab[ty[iy].num] == true) iy++;
		while (iz < n && tab[tz[iz].num] == true) iz++;
	}
	cout << -1 << '\n';
	return 0;
}
#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...