# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
127007 | Lawliet | Sure Bet (CEOI17_sure) | C++14 | 5 ms | 376 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define MAX 1010
using namespace std;
int n;
double ans = -4000000.0;
double a[MAX];
double b[MAX];
double ansA[MAX];
double ansB[MAX];
double mxAnsB[MAX];
bool test(double k)
{
for(int qtdA = 0 ; qtdA <= n ; qtdA++)
{
double aux = ansA[qtdA] - k;
//printf("===== qtdA = %d %lf\n",qtdA,aux);
if(ansA[qtdA] < k) continue;
int mxQtdB = floor( aux );
mxQtdB = min(mxQtdB , n);
//printf("----------------- qtdA = %d mxQtdB = %d\n",qtdA,mxQtdB);
if(mxAnsB[ mxQtdB ] - qtdA >= k) return true;
}
return false;
}
double bs()
{
double l = 0, r = 200000000.0;
for(int cnt = 0 ; cnt <= 500 ; cnt++)
{
double m = (l + r)/2;
//printf("l = %lf r = %lf m = %lf\n",l,r,m);
if(test(m)) l = m;
else r = m;
}
return l;
}
void init()
{
sort(a + 1 , a + n + 1);
sort(b + 1 , b + n + 1);
for(int g = 1 ; g <= n ; g++)
{
ansA[g] = ansA[g - 1] + a[n - g + 1];
ansB[g] = ansB[g - 1] + b[n - g + 1];
//printf("g = %d ansA = %lf\n",g,ansA[g]);
}
for(int g = 1 ; g <= n ; g++)
{
ansA[g] -= g;
ansB[g] -= g;
mxAnsB[g] = max(mxAnsB[g - 1] , ansB[g]);
}
}
int main()
{
scanf("%d",&n);
for(int g = 1 ; g <= n ; g++)
scanf("%lf %lf",&a[g],&b[g]);
init();
printf("%.4lf\n",bs());
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |