#ifndef local
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("O3")
#endif
#include <bits/stdc++.h>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
using ll = long long;
using str = string;
using ld = long double;
auto sd = std::chrono::high_resolution_clock::now().time_since_epoch().count();
mt19937 rnd(sd);
ld eps = 1e-5;
void solve1() {
ll n;
cin>> n;
vector<ld> a(n);
vector<ld> b(n);
ld sum1 = 0;
ld sum2 = 0;
for (int i = 0; i < n; ++i){
ld ai, bi;
cin >> ai >> bi;
a[i] = ai;
b[i] = bi;
sum1+=a[i];
sum2+=b[i];
}
sort(a.rbegin(), a.rend());
sort(b.rbegin(), b.rend());
ld l = 0;
ld r = sum1+sum2+2;
while (r-l>eps) {
ld mi = (l+r)/2;
ld A = 0;
ld B = 0;
ll i1 = 0;
ll i2 = 0;
bool change = true;
while (change) {
change= false;
if (A < mi && i1<n){
A += (a[i1]-1);
B -= 1;
i1++;
change = true;
}
if (B < mi && i2 < n){
B += (b[i2]-1);
A -= 1;
i2++;
change = true;
}
}
if (B >= mi && A >= mi){
l = mi;
}
else {
r = mi;
}
}
cout<< l<<endl;
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
#ifdef local
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
cout<<fixed<<setprecision(4);
int t1=1;
while (t1) t1--, solve1();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |