제출 #740408

#제출 시각아이디문제언어결과실행 시간메모리
740408Dan4LifeTeam Contest (JOI22_team)C++17
100 / 100
215 ms23352 KiB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define int long long
#define all(a) a.begin(),a.end()
const int mxN = (int)1.5e5+10;

struct Coder{ int x, y, z, i; };
vector<Coder> coder;
bool bad[mxN];
int n;

int32_t main() {
	cin >> n;
	for(int i = 0; i < n; i++){
		int x,y,z; cin >>x>>y>>z;
		coder.pb({x,y,z,i});
	}
	sort(all(coder),[&](Coder a, Coder b){
		return a.x < b.x;
	});
	auto coderx = coder;
	sort(all(coder),[&](Coder a, Coder b){
		return a.y < b.y;
	});
	auto codery = coder;
	sort(all(coder),[&](Coder a, Coder b){
		return a.z < b.z;
	});
	auto coderz = coder;
	int i = n-1, j = n-1, k = n-1;
	while(1){
		while(i>=0 and bad[coderx[i].i]) i--; 
		while(j>=0 and bad[codery[j].i]) j--; 
		while(k>=0 and bad[coderz[k].i]) k--; 
		if(i<0 or j<0 or k<0) {cout<<-1;return 0;}
		int X = coderx[i].x, Y = codery[j].y, Z = coderz[k].z;
		if(coderx[i].y==Y) bad[coderx[i].i]=1;
		if(coderx[i].z==Z) bad[coderx[i].i]=1;
		if(codery[j].x==X) bad[codery[j].i]=1;
		if(codery[j].z==Z) bad[codery[j].i]=1;
		if(coderz[k].x==X) bad[coderz[k].i]=1;
		if(coderz[k].y==Y) bad[coderz[k].i]=1;
		if(!bad[coderx[i].i] and !bad[codery[j].i] and !bad[coderz[k].i]){
			cout << X+Y+Z; 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...