이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
// Success consists of going from failure to failure without loss of enthusiasm
#include <bits/stdc++.h>
using namespace std;
#define nl '\n'
#define pb push_back
#define sz(x) int(x.size())
using db = double;
using ll = long long;
template<class T> using V = vector<T>;
using vl = V<ll>;
const ll MUL = ll(1e4);
int main() {
cin.tie(0)->sync_with_stdio(0);
int N; cin >> N;
vl A(N), B(N); for(int i = 0; i < N; i++) {
double x, y; cin >> x >> y;
A[i] = MUL * x, B[i] = MUL * y;
}
sort(rbegin(A), rend(A)); sort(rbegin(B), rend(B));
for(int i = 1; i < N; i++) A[i] += A[i - 1];
for(int i = 1; i < N; i++) B[i] += B[i - 1];
// for(auto& x : A) cout << x << " ";
// cout << endl;
// for(auto& x : B) cout << x << " ";
// cout << endl;
ll ans = 0;
for(int x = 2; x <= 2 * N; x++) {
// cout << x << " ===> " << endl;
// take x odds
auto F = [&](int i) {
ll res = min(A[i - 1] - x * MUL, B[x - 1 - i] - x * MUL);
// cout << i << " => " << A[i - 1] - x * MUL << " " << B[x - 1 - i] - x * MUL << " => " << res << endl;
ans = max(ans, res); return res;
};
// int lo = 1, hi = x - 1;
// while(lo < hi) {
// int mid = (lo + hi) / 2;
// if (F(mid) >= F(mid + 1)) hi = mid - 1;
// else lo = mid + 1;
// }
// F(lo);
for(int y = 0; y <= x; y++) F(y);
// maximize min_{1 <= i <= x}(A[i - 1] - x, B[x - i] - x)
}
printf("%.4lf", ans / db(MUL));
exit(0-0);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |