이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
 
#define int long long
 
void strat1(int n){
    pair<int,int> curr_x = {1,1e9};
    pair<int,int> curr_y = {1,1e9};
    auto combine = [&](pair<int,int> a,pair<int,int> b){
        return make_pair(max(a.first,b.first),min(a.second,b.second));
    };
    for(int i=1;i<=n;i++){
        pair<int,int> x,y;
        cin >> x.first >> y.first >> x.second >> y.second;
        curr_x = combine(curr_x,x);
        curr_y = combine(curr_y,y);
    }
    cout << curr_x.first << ' ' << curr_y.first << '\n';
    exit(0);
}
 
bool strat2(vector<pair<pair<int,int>,pair<int,int>>> rect){
    int minR = 1e9,minU = 1e9,maxL = 1,maxD = 1;
    for(auto&[a,b]:rect){
        maxL = max(maxL,a.first);
        minR = min(minR,a.second);
        minU = min(minU,b.second);
        maxD = max(maxD,b.first);
    }
    int satisa = 0,satisb = 0;
    auto intersect = [&](pair<int,int> point,pair<pair<int,int>,pair<int,int>> rec){
        return rec.first.first <= point.first and point.first <=rec.first.second and rec.second.first <= point.second and point.second <= rec.second.second;
    };
    for(auto&i:rect){
        if(intersect({minR,minU},i) or intersect({maxL,maxD},i))satisa++;
        if(intersect({minR,maxD},i) or intersect({maxL,minU},i))satisb++;
    }
    int n = rect.size();
    if(satisa!=n and satisb!=n)return false;
    if(satisa==n)cout<<minR<<' '<<minU<<'\n'<<maxL<<' '<<maxD<<'\n';
    else cout<<minR<<' '<<maxD<<'\n'<<maxL<<' '<<minU<<'\n';
    return true;
}
bool strat3(vector<pair<pair<int,int>,pair<int,int>>> rect){
    int minR = 1e9,minU = 1e9,maxL = 1,maxD = 1;
    for(auto&[a,b]:rect){
        maxL = max(maxL,a.first);
        minR = min(minR,a.second);
        minU = min(minU,b.second);
        maxD = max(maxD,b.first);
    }
    auto intersect = [&](pair<int,int> point,pair<pair<int,int>,pair<int,int>> rec){
        return rec.first.first <= point.first and point.first <=rec.first.second and rec.second.first <= point.second and point.second <= rec.second.second;
    };
    pair<int,int> currpoint = {minR,minU};
    int iter = 0;
    t:
    vector<pair<pair<int,int>,pair<int,int>>> newrect;
    for(auto&i:rect)if(!intersect(currpoint,i))newrect.push_back(i);
    if(strat2(newrect)){
        cout << currpoint.first << ' ' << currpoint.second << '\n';
        return true;
    }
    iter++;
    if(iter==1)currpoint={minR,maxD};
    else if(iter==2)currpoint={maxL,minU};
    else if(iter==3)currpoint={maxL,maxD};
    else return false;
    goto t;
}
int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n,k;
    cin >> n >> k;
    if(k==1)strat1(n);
    int minR = 1e9,minU = 1e9,maxL = 1,maxD = 1;
    vector<pair<pair<int,int>,pair<int,int>>> rect(n);
    vector<pair<int,int>> points;
    for(auto&[a,b]:rect){
        cin >> a.first >> b.first >> a.second >> b.second;
        maxL = max(maxL,a.first);
        minR = min(minR,a.second);
        minU = min(minU,b.second);
        maxD = max(maxD,b.first);
    }
    for(auto&[a,b]:rect){
        points.emplace_back(maxL,b.first);
        points.emplace_back(minR,b.first);
        points.emplace_back(maxL,b.second);
        points.emplace_back(minR,b.second);
        points.emplace_back(a.first,minU);
        points.emplace_back(a.first,maxD);
        points.emplace_back(a.second,minU);
        points.emplace_back(a.second,maxD);
    }
    if(k==2){
        strat2(rect);
        return 0;
    }
    if(k==3){
        strat3(rect);
        return 0;
    }
    auto intersect = [&](pair<int,int> point,pair<pair<int,int>,pair<int,int>> rec){
        return rec.first.first <= point.first and point.first <=rec.first.second and rec.second.first <= point.second and point.second <= rec.second.second;
    };
    for(auto&p:points){
        vector<pair<pair<int,int>,pair<int,int>>> newrect;
        for(auto&i:rect)if(!intersect(p,i))newrect.push_back(i);
        if(strat3(newrect)){
            cout << p.first << ' ' << p.second << '\n';
            return 0;
        }
    }
    return 1;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |