제출 #1296445

#제출 시각아이디문제언어결과실행 시간메모리
1296445IcelastTeam Contest (JOI22_team)C++20
100 / 100
68 ms7480 KiB
#include <iostream> #include <bits/stdc++.h> #define ll long long using namespace std; const ll maxn = 2*1e5+5, INF = 4e18+9; struct person{ int x, y, z; }; struct pp{ int v, id; }; void solve(){ int n; cin >> n; vector<vector<pp>> a(3, vector<pp>(n+1)); for(int i = 1; i <= n; i++){ for(int j = 0; j < 3; j++){ int v; cin >> v; a[j][i] = {v, i}; } } vector<vector<pp>> b = a; for(int j = 0; j < 3; j++){ sort(b[j].begin()+1, b[j].end(), [&](auto a, auto b){return a.v > b.v;}); } vector<int> pt(3, 1); vector<bool> ban(n+1, 0); auto check = [&]() -> bool{ for(int i = 0; i < 3; i++){ int id = b[i][pt[i]].id; if(ban[id]){ pt[i]++; return true; } } return false; }; while(true){ for(int i = 0; i < 3; i++){ if(pt[i] > n){ cout << -1; return; } } // for(int i = 0; i < 3; i++){ // cout << b[i][pt[i]].id << " "; // } // cout << "s\n"; for(int i = 0; i < 3; i++){ for(int j = 0; j < i; j++){ int idi = b[i][pt[i]].id, idj = b[j][pt[j]].id; if(idi == idj){ ban[idi] = true; break; } } } if(check()) continue; for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ if(i == j) continue; int idi = b[i][pt[i]].id, idj = b[j][pt[j]].id; if(a[j][idi].v >= a[j][idj].v){ ban[idi] = true; break; } } } if(check()) continue; break; } int ans = 0; for(int i = 0; i < 3; i++){ ans += b[i][pt[i]].v; } cout << ans; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); solve(); }
#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...