#include <bits/stdc++.h>
using namespace std;
#define ff first;
#define ss second
#define pb push_back
#define int long long
long long n,l,r,a[100005],b[100005],ans;
long double sum;
long long pref[100005][3];
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
double x,y;
cin>>x>>y;
a[i]=10000*x;
b[i]=10000*y;
}
sort(a+1,a+n+1);
sort(b+1,b+n+1);
reverse(a+1,a+n+1);
reverse(b+1,b+n+1);
for(int i=1;i<=n;i++){
pref[i][0]=pref[i-1][0]+a[i];
pref[i][1]=pref[i-1][1]+b[i];
}
for(int i=1;i<=2*n;i++){
int tl=0;
int tr=1e12;
ans=0;
while(tl<=tr){
int k=(tl+tr)/2;
int l=0;
int r=n;
int ans1=n+1;
while(l<=r){
int mid=(l+r)/2;
// cout<<pref[mid][0]<<" "<<i+k<<endl;
if(pref[mid][0]>=i*10000+k){
ans1=mid;
r=mid-1;
}else{
l=mid+1;
}
}
l=0;
r=n;
int ans2=n+1;
while(l<=r){
int mid=(l+r)/2;
if(pref[mid][1]>=i*10000+k){
ans2=mid;
r=mid-1;
}else{
l=mid+1;
}
}
if(i>=ans2+ans1){
ans=k;
tl=k+1;
}else{
tr=k-1;
}
}
// cout<<ans<<endl;
// cout<<i<<" "<<ans<<endl;
long double x=ans;
sum=max(sum,x);
}
sum/=10000;
cout<<fixed<<setprecision(4)<<sum<<endl;
// cout<<sum<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |