Submission #744197

#TimeUsernameProblemLanguageResultExecution timeMemory
744197siewjhIzvanzemaljci (COI21_izvanzemaljci)C++17
26 / 100
55 ms9928 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf = 2e9 + 5;
typedef tuple<ll, ll, ll> iii;
typedef tuple<ll, ll, ll, ll> iiii;
bool cmp(pair<ll, ll> &a, pair<ll, ll> &b){
	return a.second < b.second;
}
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	int nums, k; cin >> nums >> k;
	if (k == 1){
		ll mnx = inf, mny = inf, mxx = -inf, mxy = -inf;
		for (int i = 0; i < nums; i++){
			ll x, y; cin >> x >> y;
			mnx = min(mnx, x); mny = min(mny, y);
			mxx = max(mxx, x); mxy = max(mxy, y);
		}
		cout << mnx << ' ' << mny << ' ' << max(1ll, max(mxx - mnx, mxy - mny));
	}
	else if (k == 2){
		vector<iii> ans(2); ll sqsz = inf;
		vector<pair<ll, ll>> pts(nums + 1);
		pts[0] = {-inf, -inf};
		for (int i = 1; i <= nums; i++){
			ll x, y; cin >> x >> y;
			pts[i] = {x, y};
		}
		{
			sort(pts.begin(), pts.end());
			vector<iiii> pref(nums + 1), suff(nums + 2);
			ll mnx = inf, mny = inf, mxx = -inf, mxy = -inf;
			pref[0] = {mnx, mny, mxx, mxy};
			for (int i = 1; i <= nums; i++){
				ll x = pts[i].first, y = pts[i].second;
				mnx = min(mnx, x); mny = min(mny, y);
				mxx = max(mxx, x); mxy = max(mxy, y);
				if (i != nums && pts[i].first == pts[i + 1].first) pref[i] = {-inf, -inf, -inf, -inf};
				else pref[i] = {mnx, mny, mxx, mxy};
			}
			mnx = inf, mny = inf, mxx = -inf, mxy = -inf;
			suff[nums + 1] = {mnx, mny, mxx, mxy};
			for (int i = nums; i >= 1; i--){
				ll x = pts[i].first, y = pts[i].second;
				mnx = min(mnx, x); mny = min(mny, y);
				mxx = max(mxx, x); mxy = max(mxy, y);
				if (i != 1 && pts[i].first == pts[i - 1].first) suff[i] = {-inf, -inf, -inf, -inf};
				else suff[i] = {mnx, mny, mxx, mxy};
			}
			for (int i = 0; i <= nums; i++){
				if (get<0>(pref[i]) == -inf) continue;
				iii psq, ssq; ll sz = 1;
				if (i == 0){
					psq = {-inf, -inf, 1};
					sz = max(sz, 1ll);
				}
				else{
					ll cmnx, cmny, cmxx, cmxy; tie(cmnx, cmny, cmxx, cmxy) = pref[i];
					ll csz = max(1ll, max(cmxx - cmnx, cmxy - cmny));
					psq = {cmxx - csz, cmxy - csz, csz};
					sz = max(sz, csz);
				}
				if (i == nums){
					ssq = {inf, inf, 1};
					sz = max(sz, 1ll);
				}
				else{
					ll cmnx, cmny, cmxx, cmxy; tie(cmnx, cmny, cmxx, cmxy) = suff[i + 1];
					ll csz = max(1ll, max(cmxx - cmnx, cmxy - cmny));
					ssq = {cmnx, cmny, csz};
					sz = max(sz, csz);
				}
				if (sz < sqsz){
					ans = {psq, ssq};
					sqsz = sz;
				}
			}
		}
		{
			sort(pts.begin(), pts.end(), cmp);
			vector<iiii> pref(nums + 1), suff(nums + 2);
			ll mnx = inf, mny = inf, mxx = -inf, mxy = -inf;
			pref[0] = {mnx, mny, mxx, mxy};
			for (int i = 1; i <= nums; i++){
				ll x = pts[i].first, y = pts[i].second;
				mnx = min(mnx, x); mny = min(mny, y);
				mxx = max(mxx, x); mxy = max(mxy, y);
				if (i != nums && pts[i].second == pts[i + 1].second) pref[i] = {-inf, -inf, -inf, -inf};
				else pref[i] = {mnx, mny, mxx, mxy};
			}
			mnx = inf, mny = inf, mxx = -inf, mxy = -inf;
			suff[nums + 1] = {mnx, mny, mxx, mxy};
			for (int i = nums; i >= 1; i--){
				ll x = pts[i].first, y = pts[i].second;
				mnx = min(mnx, x); mny = min(mny, y);
				mxx = max(mxx, x); mxy = max(mxy, y);
				if (i != 1 && pts[i].second == pts[i - 1].second) suff[i] = {-inf, -inf, -inf, -inf};
				else suff[i] = {mnx, mny, mxx, mxy};
			}
			for (int i = 0; i <= nums; i++){
				if (get<0>(pref[i]) == -inf) continue;
				iii psq, ssq; ll sz = 1;
				if (i == 0){
					psq = {-inf, -inf, 1};
					sz = max(sz, 1ll);
				}
				else{
					ll cmnx, cmny, cmxx, cmxy; tie(cmnx, cmny, cmxx, cmxy) = pref[i];
					ll csz = max(1ll, max(cmxx - cmnx, cmxy - cmny));
					psq = {cmxx - csz, cmxy - csz, csz};
					sz = max(sz, csz);
				}
				if (i == nums){
					ssq = {inf, inf, 1};
					sz = max(sz, 1ll);
				}
				else{
					ll cmnx, cmny, cmxx, cmxy; tie(cmnx, cmny, cmxx, cmxy) = suff[i + 1];
					ll csz = max(1ll, max(cmxx - cmnx, cmxy - cmny));
					ssq = {cmnx, cmny, csz};
					sz = max(sz, csz);
				}
				if (sz < sqsz){
					ans = {psq, ssq};
					sqsz = sz;
				}
			}
		}
		for (int i = 0; i < 2; i++){
			ll x, y, sz; tie(x, y, sz) = ans[i];
			cout << x << ' ' << y << ' ' << sz << '\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...