Submission #1000065

#TimeUsernameProblemLanguageResultExecution timeMemory
1000065UnforgettableplHamburg Steak (JOI20_hamburg)C++17
15 / 100
1118 ms39780 KiB
#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); 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; points.emplace_back(a.first,b.first); points.emplace_back(a.first,b.second); points.emplace_back(a.second,b.first); points.emplace_back(a.second,b.second); } 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 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...