Submission #1196560

#TimeUsernameProblemLanguageResultExecution timeMemory
1196560woohyun_jng새로운 문제 (COCI19_akvizna)C++20
0 / 100
0 ms0 KiB
#include <bits/stdc++.h> #define int long long #define double long double using namespace std; typedef array<double, 4> ftp; const int MAX = 300000; const double CONST = 100000; double dp[MAX][2]; signed main() { ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0); int N, K, X; double ans, Y, st, en, md; ftp V; vector<ftp> F; cin >> N >> K; st = 0, en = ans = N * CONST; while (en - st > 0.00001) { md = (st + en) / 2, F.clear(), F.push_back({0, 0, MAX, 0}), X = 0; for (int i = 1; i <= N; i++) { Y = CONST / i; while (X + 1 < F.size() && F[X + 1][2] >= Y) X++; dp[i][0] = F[X][0] * Y + F[X][1] + CONST - md, dp[i][1] = F[X][3] + 1; V = {-(double)i, dp[i][0], 0, dp[i][1]}; while (!F.empty()) { V[2] = (F.back()[1] - V[1]) / (V[0] - F.back()[0]); if (F.back()[2] > V[2]) break; F.pop_back(); if (F.size() == X) --X; } F.push_back(V); } ans = min(ans, dp[N][0] + md * K); if (dp[N][1] <= K) en = md; else st = md; } cout << fixed << setprecision(10) << (double)ans / CONST << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...