結果
| 問題 | No.3759 Watch Fireworks |
| コンテスト | |
| ユーザー |
kyoprouno
|
| 提出日時 | 2026-10-03 02:49:17 |
| 言語 | C++23(gcc16) (gcc 16.1.0 + boost 1.92.0 + ACL) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 1,995 bytes |
| 記録 | |
| コンパイル時間 | 2,178 ms |
| コンパイル使用メモリ | 366,140 KB |
| 実行使用メモリ | 12,780 KB |
| 最終ジャッジ日時 | 2026-10-09 20:51:54 |
| 合計ジャッジ時間 | 6,608 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 45 WA * 2 |
ソースコード
#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<ll> x(n), y(n);
ll max_x = -inf, min_x = inf, max_y = -inf, min_y = inf;
for(int i = 0; i < n; i++){
cin >> x[i] >> y[i];
chmax(max_x,x[i]);
chmin(min_x,x[i]);
chmax(max_y,y[i]);
chmin(min_y,y[i]);
}
if(max_y - min_y > max_x - min_x)swap(x,y);
vector<pair<ll,ll>> p(n);
for(int i = 0; i < n; i++){
p[i].first = x[i] + y[i];
p[i].second = x[i] - y[i];
}
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