#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define ff first
#define sd second
#define debug(x) cerr << #x << "----> " << x << endl;
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("O3")
const int mxN = 1e6 + 5;
ll n,a[mxN],b[mxN];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ll ans = 0;
cin >> n;
string s;
for(int i = 1; i <= n; i++){
cin >> s;
ll val = 1,idx = s.size() - 1;
for(int j = 0; j < s.size(); j++){
if(s[j] == '.'){
idx = j;
break;
}
}
for(int j = 0; j < 5 - (s.size() - idx); j++) val *= 10;
for(int j = s.size() - 1; j >= 0; j--){
if(s[j] == '.') continue;
a[i] += val * (s[j] - '0');
val *= 10;
}
cin >> s;
val = 1;idx = s.size() - 1;
for(int j = 0; j < s.size(); j++){
if(s[j] == '.'){
idx = j;
break;
}
}
for(int j = 0; j < 5 - (ll)(s.size() - idx); j++) val *= 10;
for(int j = s.size() - 1; j >= 0; j--){
if(s[j] == '.') continue;
b[i] += val * (s[j] - '0');
val *= 10;
}
}
sort(a + 1, a + n + 1);
reverse(a + 1, a + n + 1);
sort(b + 1, b + n + 1);
reverse(b + 1, b + n + 1);
ans = max(ans, min(a[1] - 20000, b[1] - 20000));
ll l = 2,l1 = 2,sum = a[1] - 20000, sum1 = b[1] - 20000;
for(int i = 3; i <= 2 * n; i++){
if((sum < sum1 or l1 > n) and l <= n){
sum += a[l++] - 10000;
sum1 -= 10000;
}
else{
sum1 += b[l1++] - 10000;
sum -= 10000;
}
ans = max(ans, min(sum, sum1));
}
cout << ans / 10000 << ".";
s = to_string(ans % 10000);
while(s.size() < 4) s = "0" + s;
cout << s;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |