Submission #340196

#TimeUsernameProblemLanguageResultExecution timeMemory
340196blueSure Bet (CEOI17_sure)C++11
100 / 100
187 ms3692 KiB
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;

/*
a[i] >= a[i+1]
b[i] >= b[i+1]

To maximise: min(a[1] + ... + a[i], b[1] + ... + b[j]) - (i + j)
*/

int main()
{
    int n;
    cin >> n;

    double a[n], b[n];
    for(int i = 0; i < n; i++)
    {
        cin >> a[i] >> b[i];
        a[i] = -1.0 * a[i];
        b[i] = -1.0 * b[i];
    }
    sort(a, a+n);
    sort(b, b+n);

    double res = 0.0;

    int A = 0, B = 0;
    double asum = 0.0, bsum = 0.0;

    while(A+B < 2*n)
    {
        if(A == n)
        {
            bsum -= b[B];
            B++;
        }
        else if(B == n)
        {
            asum -= a[A];
            A++;
        }
        else if(asum == bsum)
        {
            if(-a[A] > -b[B])
            {
                asum -= a[A];
                A++;
            }
            else
            {
                bsum -= b[B];
                B++;
            }
        }
        else if(asum > bsum)
        {
            bsum -= b[B];
            B++;
        }
        else
        {
            asum -= a[A];
            A++;
        }
        res = max(res, min(asum, bsum) - double(A+B));
    }
    printf("%.4lf",(double)res);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...