Submission #309756

#TimeUsernameProblemLanguageResultExecution timeMemory
309756vipghn2003Sure Bet (CEOI17_sure)C++14
100 / 100
142 ms4600 KiB
#include<bits/stdc++.h>

using namespace std;

const int N=1e5+5;
int n;
double a[N],b[N];
long long s[N];

bool check(long long lim)
{
    long long cur=0;
    for(int i=1;i<=n;i++)
    {
        cur+=a[i];
        long long mx=(cur-lim)/1000000000-i;
        if(mx<0) continue;
        mx=min(mx,1ll*n);
        if(s[mx]-1ll*i*1000000000>=lim) return true;
    }
    return false;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i]>>b[i];
        a[i]*=1000000000;
        b[i]*=1000000000;
    }
    sort(a+1,a+n+1);
    sort(b+1,b+n+1);
    reverse(a+1,a+n+1);
    reverse(b+1,b+n+1);
    for(int i=1;i<=n;i++) s[i]=max(s[i-1],s[i-1]+(long long)b[i]-1000000000);
    long long l=1,r=1e18,res=0;
    while(l<=r)
    {
        long long mid=(l+r)/2;
        if(check(mid))
        {
            res=mid;
            l=mid+1;
        }
        else r=mid-1;
    }
    cout<<fixed<<setprecision(4)<<1.0*res/1000000000;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...