Editorial for Khoảng cách lớn nhất


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

Submitting an official solution before solving the problem yourself is a bannable offence.

\(\color{red}{\text{Spoiler Alert}_{{}_{{}^{{}^{v2.0}}}}}\)

\(\color{red}{\text{Khuyến khích bạn đọc trước khi đọc phần lời giải xin hãy thử code ra thuật của mình dù nó có sai hay đúng}}\)

\(\color{red}{\text{Sau đó từ phần bài giải và thuật toán trước đó mà đối chiếu, rút nhận xét với thuật của mình và thu được bài học (không lãng phí thời gian đâu).}}\)



\(\color{orange}{\text{Hint 1 <Brute-force>}}\)

  • Thử từng cặp \((A[i], A[j])\) và tìm giá trị lớn nhất

\(\color{orange}{\text{Hint 2 <Implementation>}}\)

  • Nhận thấy các điểm chỉ nằm trên trục \(Ox\)\(Oy\)

Khi ta chọn một điểm ở trục \(Ox\) hoặc \(Oy\), giá trị của nó sẽ lớn hơn khi mình di chuyển ngược hướng từ nó với điểm \(O\)

Ta cần tìm \(max\) nên ta sẽ tìm các giá trị ngoài cùng

Lúc này có các trường hợp:

2 điểm cùng trục \(Ox\)

2 điểm cùng trục \(Oy\)

1 điểm ở trục \(Ox\), 1 điểm ở trục \(Oy\)


\(\color{green}{\text{Preference AC Code }}\): Implementation

\(^{^{\color{purple}{\text{Complexity : }} O(n)\ \color{purple}{\text{time}}\ ||\ O(1)\ \color{purple}{\text{memory}}}}\)

```cpp
ll sq(int x) { return 1LL * x * x; }
double dis(int d0, int d1) {
return sqrt(sq(d0) + sq(d1));
}

int main()
{
int max_x = -INF, min_x = +INF;
int max_y = -INF, min_y = +INF;
for (int n = readInt(); n-->0; )
{
int x, y;
cin >> x >> y;
maximize(max_x, x); /// Tim vi tri truc x ngoai cung (+)
maximize(max_y, y); /// Tim vi tri truc y ngoai cung (+)
minimize(min_x, x); /// Tim vi tri truc x ngoai cung (-)
minimize(min_y, y); /// Tim vi tri truc y ngoai cung (-)
}

double res = 0;
maximize(res, double(max_x - min_x)); /// Cung truc Ox
maximize(res, double(max_y - min_y)); /// Cung truc Oy
maximize(res, dis(max(abs(max_x), abs(min_x)), max(abs(max_y), abs(min_y)))); /// Hai diem 2 truc khac nhau
cout << setprecision(6) << fixed << res;
return 0;

}```



Comments

There are no comments at the moment.