#include <bits/stdc++.h>
#define ll long long
#define pb(a) push_back(a)
#define in(a) insert(a)
#define lldef ll N=0,M=0,K=0,sum=0; string s="";
#define loop(valuename,startvalue,endvalue,changevalue) for(ll valuename=startvalue; valuename<endvalue; valuename+=changevalue)
#define rloop(valuename,startvalue,endvalue,changevalue) for(ll valuename=startvalue-1; valuename>=endvalue; valuename-=changevalue)
#define mk make_pair
#define begin begin()
#define end end()
#define db long double
#define ff first
#define ss second
using namespace std;
const int SIZE=1e5+69;
const int MOD=1e9+7;
// vector<ll>var;
// vector<multiset<ll>>ADJ(SIZE);
// vector<ll>vis(SIZE,0);
// vector<ll>parent(SIZE,-1);
// void dfs(ll vertex){
// vis[vertex]=true;
// var.pb(vertex);
// for(auto it:ADJ[vertex]){
// if(!vis[it]){
// dfs(it);
// }
// }
// }
bool Ptwo(ll N){
return (~N&N-1)==N-1;
}
ll l=0;
inline void test_case(){
lldef;
cin>>N;
vector<db>A,B;
db ans=0.0;
loop(i,0,N,1){
db x,y;
cin>>x>>y;
A.pb(x); B.pb(y);
}
sort(A.begin,A.end);
sort(B.begin,B.end);
reverse(A.begin,A.end);
reverse(B.begin,B.end);
ll pointer1=0,pointer2=-1,bet=1;
db sum1=0.0,sum2=0.0;
sum1+=A[pointer1];
while(pointer1<N and pointer2<N){
if(sum1>sum2){
pointer2++;
sum2+=B[pointer2];
bet++;
}else{
pointer1++;
sum1+=A[pointer1];
bet++;
}
ans=max(ans,min(sum1,sum2)-bet);
}
printf("%.4lf",(double)ans);
}
int main(){
ll t=1;
//cin>>t;
while(t--) {test_case(); l++;}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |