Submission #1137085

#TimeUsernameProblemLanguageResultExecution timeMemory
1137085RaresFelixHamburg Steak (JOI20_hamburg)C++20
6 / 100
51 ms14760 KiB
#include <bits/stdc++.h>

using namespace std;

//#define int ll

using ll = long long;
using vi = vector<int>;
using ii = pair<int, int>;
using vll = vector<ll>;

const int INF = 1e9 + 71;

struct steak {
    ii h, v;
    bool inside(ii pct) {
        return h.first <= pct.first && pct.first <= h.second
            && v.first <= pct.second && pct.second <= v.second;
    }
};

ii seg_extremums(vector<ii> V) {
    int l = -INF, r = INF;
    for(auto [s, d] : V) {
        l = max(l, s);
        r = min(r, d);
    }
    return {l, r};
}

tuple<int, int, int, int> get_steak_extremums(vector<steak> S) {
    vector<ii> H, V;
    for(auto [h, v] : S) {
        H.push_back(h); V.push_back(v);
    }
    auto [lh, rh] = seg_extremums(H);
    auto [lv, rv] = seg_extremums(V);
    return {lh, rh, lv, rv};
}

vector<ii> sol_k2(vector<steak> S) {
    ///will return the solution if it satisfies everyone
    auto [lh, rh, lv, rv] = get_steak_extremums(S);

    vector<ii> re;
    auto check_sol = [&](ii p1, ii p2) -> bool{
        bool ok = true;
        for(auto it : S) {
            ok &= it.inside(p1) || it.inside(p2);
            if(!ok) break;
        }
        if(ok) {
            re = vector<ii>{p1, p2};
        }
        return ok;
    };
    check_sol(ii{lh, lv}, ii{rh, rv});
    check_sol(ii{lh, rv}, ii{rh, lv});
    return re;
}

vector<ii> sol_k1(vector<steak> S) {
    auto [lh, rh, lv, rv] = get_steak_extremums(S);
    if(lh <= rh && lv <= rv) return vector<ii>{ii{lh, lv}};
    return vector<ii>();
}

int main() {
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    int n, k;
    cin >> n >> k;
    vector<steak> S(n);
    for(int i = 0; i < n; ++i) {
        cin >> S[i].h.first >> S[i].v.first >> S[i].h.second >> S[i].v.second;
    }
    vector<ii> Re;
    if(k == 1) Re = sol_k1(S);
    if(k == 2) Re = sol_k2(S);

    for(auto it : Re) cout << it.first << " " << it.second << "\n";

    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...
#Verdict Execution timeMemoryGrader output
Fetching results...