Dist Max
問題
E – Dist Max
プログラミング初級者から上級者まで楽しめる、競技プログラミングコンテストサイト「AtCoder」。オンラインで毎週開催プログラミングコンテストを開催しています。競技…
記録
- 2021/1/27 解法わからず。
解法
- \((x, y)\) を \(45°\) 回転座標系 \((x’, y’)\) にすると、\((x’=x-y, y’=x+y)\) となる。
- \((x_{1}, y_{1})\) と \((x_{2}, y_{2})\) のマンハッタン距離は \(45°\) 回転座標系で考えると \(max(|x’_{1}- x’_{2}|,|y’_{1}- y’_{2}|)\) で計算することができる。
- \(45°\) 回転座標系で考えると \(x’\) と \(y’\) を区別してみることができる。
コード例
#include <bits/stdc++.h> using namespace std; #include <atcoder/all> using namespace atcoder; using ll = long long; using P = pair<int, int>; #define rep(i, n) for(int i = 0; i < (n); ++i) // using mint = modint998244353; // using mint = modint1000000007; // const int mod = 1000000007; // const ll INF = 1LL << 62; // const int INF = 1001001001; int main() { int N; cin >> N; vector<long long> a(N); vector<long long> b(N); for (int i = 0; i < N; ++i) { long long x, y; cin >> x >> y; a[i] = x + y; b[i] = x - y; } sort(a.begin(), a.end()); sort(b.begin(), b.end()); cout << max(abs(a[0] - a[N - 1]), abs(b[0] - b[N - 1])) << endl; return 0; }