結果
| 問題 |
No.180 美しいWhitespace (2)
|
| コンテスト | |
| ユーザー |
minami
|
| 提出日時 | 2019-03-28 03:11:51 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,453 bytes |
| コンパイル時間 | 1,829 ms |
| コンパイル使用メモリ | 170,748 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-11 19:51:25 |
| 合計ジャッジ時間 | 3,043 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 31 |
ソースコード
#include "bits/stdc++.h"
using namespace std;
#ifdef _DEBUG
#include "dump.hpp"
#else
#define dump(...)
#endif
#define int long long
#define rep(i,a,b) for(int i=(a);i<(b);i++)
#define rrep(i,a,b) for(int i=(b)-1;i>=(a);i--)
#define all(c) begin(c),end(c)
const int INF = sizeof(int) == sizeof(long long) ? 0x3f3f3f3f3f3f3f3fLL : 0x3f3f3f3f;
const int MOD = 1'000'000'007;
template<class T> bool chmax(T &a, const T &b) { if (a < b) { a = b; return true; } return false; }
template<class T> bool chmin(T &a, const T &b) { if (b < a) { a = b; return true; } return false; }
signed main() {
cin.tie(0);
ios::sync_with_stdio(false);
int N; cin >> N;
vector<int> a(N), b(N); rep(i, 0, N) {
cin >> a[i] >> b[i];
}
cerr << fixed << setprecision(10);
// 三分探索
auto f = [&](int x) {
int maxi = -INF, mini = INF;
rep(i, 0, N) {
chmax(maxi, a[i] + b[i] * x);
chmin(mini, a[i] + b[i] * x);
}
return maxi - mini;
};
auto ternarySearch = [&](int l, int r) {
for (int i = 0; i < 70; i++) {
int m1 = l + (r - l) / 3, m2 = r - (r - l) / 3;
dump(l, m1, m2, r);
// min 下に凸 : f(m1) > f(m2)
// max 上に凸 : f(m1) < f(m2)
if (f(m1) > f(m2)) {
l = m1;
}
else {
r = m2;
}
}
int mini = f(l);
int ret = l;
for (int i = l + 1; i <= r; i++) {
if (mini > f(i)) {
mini = f(i);
ret = i;
}
}
return ret;
};
int x = ternarySearch(1, 1000000000);
cout << x << endl;
return 0;
}
minami