제출 #1131681

#제출 시각아이디문제언어결과실행 시간메모리
1131681tuongllTeam Contest (JOI22_team)C++20
100 / 100
72 ms7328 KiB
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <utility>
#include <cmath>
#include <ctime>
#include <cassert>
#include <set>
#include <stack>
#include <map>
#include <queue>
#include <random>
#include <chrono>
#include <bitset>
#include <array>
using ll = long long;
#define debug(x) cout << #x << " = " << x << '\n'
#define separator "===============================================\n"
#define all(a) a.begin(), a.end()
#define SZ(a) (int)(a).size()
using namespace std;
const int mxn = 1e5 + 3;
const ll  mod = 1e9 + 7;
const int inf32 = 2e9;
const ll  inf64 = 3e18;
void solve(){
    int n; cin >> n;
    vector<vector<int>> a(3, vector<int>(n));
    vector<vector<pair<int, int>>> v(3);
    for (int i = 0; i < n; ++i){
        for (int j = 0; j < 3; ++j){
            cin >> a[j][i];
            v[j].emplace_back(a[j][i], i);
        }
    }
    for (int j = 0; j < 3; ++j)
        sort(all(v[j]), greater<>());
    vector<bool> vis(n, false);
    vector<int> it(3, 0);
    while(max({it[0], it[1], it[2]}) < n){
        vector<int> idx(3);
        for (int j = 0; j < 3; ++j)
            idx[j] = v[j][it[j]].second;
        bool good = true;
        for (int i = 0; i < 3; ++i){
            bool flag = false;
            for (int j = 0; j < 3; ++j){
                if (i == j) continue;
                flag |= a[j][idx[i]] >= a[j][idx[j]];
            }
            if (flag) vis[idx[i]] = true, good = false;
        }
        if (good){
            cout << a[0][idx[0]] + a[1][idx[1]] + a[2][idx[2]] << '\n';
            return;
        }
        for (int j = 0; j < 3; ++j)
            while(it[j] < n && vis[v[j][it[j]].second]) ++it[j];
    }
    cout << -1 << '\n';
}
int main(){
	auto start = chrono::steady_clock::now();
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t = 1;
    // cin >> t;
    while(t--) solve();
    chrono::duration<double> elapsed {chrono::steady_clock::now() - start};
    cerr << "\n>> Runtime: " << elapsed.count() << "s\n";
}
#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...