Submission #1370382

#TimeUsernameProblemLanguageResultExecution timeMemory
1370382pirmyratgTeam Contest (JOI22_team)C++17
8 / 100
25 ms2204 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    // Optimize I/O performance
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n;
    if (!(cin >> n)) return 0;

    vector<int> s(n), a(n), i1(n);
    for (int i = 0; i < n; i++) {
        cin >> s[i] >> a[i] >> i1[i];
    }

    long long r = -1;
    bool v = false;

    if (n <= 300) {
        for (int i = 0; i <= n - 3; i++) {
            for (int j = i + 1; j <= n - 2; j++) {
                for (int k = j + 1; k <= n - 1; k++) {
                    
                    int b1 = -1, b2 = -1, b3 = -1;

                    // Logic for item i
                    if (s[i] > s[j] && s[i] > s[k]) b1 = 0;
                    if (a[i] > a[j] && a[i] > a[k]) b1 = 1;
                    if (i1[i] > i1[j] && i1[i] > i1[k]) b1 = 2;

                    // Logic for item j
                    if (s[j] > s[i] && s[j] > s[k]) b2 = 0;
                    if (a[j] > a[i] && a[j] > a[k]) b2 = 1;
                    if (i1[j] > i1[i] && i1[j] > i1[k]) b2 = 2;

                    // Logic for item k
                    if (s[k] > s[i] && s[k] > s[j]) b3 = 0;
                    if (a[k] > a[i] && a[k] > a[j]) b3 = 1;
                    if (i1[k] > i1[i] && i1[k] > i1[j]) b3 = 2;

                    // Check if each item is a unique leader in one of the three categories
                    if (b1 != -1 && b2 != -1 && b3 != -1 && 
                        b1 != b2 && b2 != b3 && b1 != b3) {
                        
                        long long ms = max({s[i], s[j], s[k]});
                        long long ma = max({a[i], a[j], a[k]});
                        long long mi = max({i1[i], i1[j], i1[k]});

                        if (!v || (ms + ma + mi > r)) {
                            r = ms + ma + mi;
                            v = true;
                        }
                    }
                }
            }
        }
    } else {
        // Greedy approach for larger N
        int m1_idx = 0, m2_idx = 0, m3_idx = 0;

        for (int i = 0; i < n; i++) {
            if (s[i] > s[m1_idx]) m1_idx = i;
            if (a[i] > a[m2_idx]) m2_idx = i;
            if (i1[i] > i1[m3_idx]) m3_idx = i;
        }

        if (m1_idx != m2_idx && m2_idx != m3_idx && m1_idx != m3_idx) {
            long long ms = max({s[m1_idx], s[m2_idx], s[m3_idx]});
            long long ma = max({a[m1_idx], a[m2_idx], a[m3_idx]});
            long long mi = max({i1[m1_idx], i1[m2_idx], i1[m3_idx]});
            r = ms + ma + mi;
        }
    }

    cout << r << endl;

    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...