제출 #1308119

#제출 시각아이디문제언어결과실행 시간메모리
1308119shisp1Sure Bet (CEOI17_sure)C++20
100 / 100
68 ms3716 KiB
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define int long long
using namespace std;
const int mod = 1e9+7;
const ll inf = 1e18;
const int N = 2e5+5;
const double eps = 1e-7;
void solve() {
    int n;
    cin >> n;
    vector<double>a(n+1),b(n+1);
    for(int i = 1;i<=n;i++) {
        cin >> a[i] >> b[i];
    }
    sort(a.begin()+1,a.end(),greater<double>());
    sort(b.begin()+1,b.end(),greater<double>());
    vector<double>pr1(n+1), pr2(n+1);
    for(int i = 1;i<=n;i++) {
        pr1[i] = pr1[i-1]+a[i];
        pr2[i] = pr2[i-1]+b[i];
    }
    double best = -inf;
    for(int i = 0;i<=n;i++) {
        int l = 0,r = n;
        while(r-l>3) {
            int m1 = l+(r-l)/3;
            int m2 = r-(r-l)/3;
            if(min(pr1[i],pr2[m1])-i-m1<min(pr1[i],pr2[m2])-i-m2) {
                l = m1;
            } else {
                r = m2;
            }
        }
        for(int j = l;j<=r;j++) {
            best = max(best, min(pr1[i],pr2[j])-i-j);
        }
    }
    cout<<fixed << setprecision(4) << best;
}
signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int tt=1;
    //cin >> tt;
    while(tt--) {
        solve();
    }





    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...