Submission #1296445

#TimeUsernameProblemLanguageResultExecution timeMemory
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...