# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
283161 | cgiosy | 새로운 문제 (COCI19_akvizna) | C++17 | 0 ms | 0 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.
#pragma GCC optimize("Ofast")
#include <cstdio>
struct fn {
double x;
int j, c;
};
int cr(fn& a, fn& b) { return a.x!=b.x ? fmin((a.j-b.j)/(a.x-b.x), 1e9) : 1e9; }
int main() {
int N, K;
scanf("%d%d", &N, &K);
double l=0, r=1+1e-10;
int C[N+1];
fn D[N+1];
D[0]={};
while(1) {
bool last=r-l<1e-10;
auto m=(l+r)/2;
int k=0, s=0, e=0;
C[0]=N;
for(int i=1; i<=N && (last || k<=K); i++) {
while(C[s]<i) s++;
fn t{D[s].x+double(i-D[s].j)/i-m, i, k=D[s].c+1};
while(s<e && C[e-1]>=(C[e]=cr(D[e], t))) e--;
if(s==e) C[e]=cr(D[e], t);
D[++e]=t, C[e]=N;
}
if(k==K || last) return!printf("%.9lf", D[e].x+K*m);
(k>K?l:r)=m;
}
}