Submission #468704

#TimeUsernameProblemLanguageResultExecution timeMemory
468704JosiaSure Bet (CEOI17_sure)C++17
100 / 100
102 ms3760 KiB
#include <bits/stdc++.h>

#define int int64_t

using namespace std;




signed main() { // they may not be all connected!!!
    cin.tie(0);
    ios_base::sync_with_stdio(0);


    int n; cin >> n;

    vector<double> bets1(n);
    vector<double> bets2(n);

    for (int i = 0; i<n; i++) {
        cin >> bets1[i] >> bets2[i];
    }


    sort (bets1.begin(), bets1.end());
    sort (bets2.begin(), bets2.end());

    reverse(bets1.begin(), bets1.end());
    reverse(bets2.begin(), bets2.end());


    vector<double> pfs1={0}, pfs2={0};

    for (int i = 0; i<n; i++) {
        pfs1.push_back(pfs1.back()+bets1[i]);
        pfs2.push_back(pfs2.back()+bets2[i]);
    }

    double res = 0;
    
    double p1 = 1;
    double p2 = 1;

    res = max(res, min(pfs1[p1]-p1-p2, pfs2[p2]-p1-p2));

    while (p1 < n || p2<n) {
        if (p1==n) p2++;
        else if (p2==n) p1++;

        else if (pfs1[p1] <= pfs2[p2]) p1++; // better heuristic?
        else p2++;

        res = max(res, min(pfs1[p1]-p1-p2, pfs2[p2]-p1-p2));
    }




    printf("%.4lf\n",(double)res);


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