# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
127004 | Lawliet | Sure Bet (CEOI17_sure) | C++14 | 2 ms | 376 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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;
if(ansA[qtdA] < k) continue;
int mxQtdB = floor( aux );
//printf("----------------- qtdA = %d mxQtdB = %d\n",qtdA,mxQtdB);
if(mxAnsB[ mxQtdB ] >= qtdA) return true;
}
return false;
}
double bs()
{
double l = 0, r = 300000000.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());
}
컴파일 시 표준 에러 (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... |