結果
| 問題 | No.3759 Watch Fireworks |
| コンテスト | |
| ユーザー |
kyoprouno
|
| 提出日時 | 2026-10-03 03:00:56 |
| 言語 | C++23(gcc16) (gcc 16.1.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 226 ms / 2,000 ms |
| + 66µs | |
| コード長 | 2,019 bytes |
| 記録 | |
| コンパイル時間 | 2,212 ms |
| コンパイル使用メモリ | 363,592 KB |
| 実行使用メモリ | 9,920 KB |
| 最終ジャッジ日時 | 2026-10-09 20:51:22 |
| 合計ジャッジ時間 | 6,356 ms |
|
ジャッジサーバーID (参考情報) |
judge5_1 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 47 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template <class T, class U>
inline bool chmin(T &a, const U &b) { return a > b ? a = b, true : false; }
template <class T, class U>
inline bool chmax(T &a, const U &b) { return a < b ? a = b, true : false; }
const ll inf = 2e9;
void main_() {
int n;
cin >> n;
vector<pair<ll,ll>> p(n);
ll max_x = -inf, min_x = inf, max_y = -inf, min_y = inf;
for(int i = 0; i < n; i++){
ll x,y;
cin >> x >> y;
p[i].first = x + y;
p[i].second = x - y;
chmax(max_x,p[i].first);
chmin(min_x,p[i].first);
chmax(max_y,p[i].second);
chmin(min_y,p[i].second);
}
if(max_y - min_y > max_x - min_x){
for(int i = 0; i < n; i++){
swap(p[i].first, p[i].second);
}
}
sort(p.begin(),p.end());
ll le = -1, ri = p[n-1].first - p[0].first;
while(ri - le > 1){
ll mid = (ri + le) / 2;
bool ex = false;
ll y1 = p[0].second;
for(int i = 0; i < n; i++){
if(p[i].first <= p[0].first + mid)chmax(y1,p[i].second);
}
ll max_qx = -inf, min_qx = inf, max_qy = -inf, min_qy = inf;
for(int i = 0; i < n; i++){
if(p[i].first > p[0].first + mid || (p[i].second < y1 - mid || p[i].second > y1)){
chmax(max_qx,p[i].first);
chmin(min_qx,p[i].first);
chmax(max_qy,p[i].second);
chmin(min_qy,p[i].second);
}
}
if(max_qx - min_qx <= mid && max_qy - min_qy <= mid)ex = true;
ll y2 = p[0].second;
for(int i = 0; i < n; i++){
if(p[i].first <= p[0].first + mid)chmin(y2,p[i].second);
}
max_qx = -inf, min_qx = inf, max_qy = -inf, min_qy = inf;
for(int i = 0; i < n; i++){
if(p[i].first > p[0].first + mid || (p[i].second < y2 || p[i].second - mid> y2)){
chmax(max_qx,p[i].first);
chmin(min_qx,p[i].first);
chmax(max_qy,p[i].second);
chmin(min_qy,p[i].second);
}
}
if(max_qx - min_qx <= mid && max_qy - min_qy <= mid)ex = true;
if(ex)ri = mid;
else le = mid;
}
cout << ri << endl;
};
int main() {
int t = 1;
// cin >> t;
while(t--) main_();
return 0;
}
kyoprouno