Submission #1317565

#TimeUsernameProblemLanguageResultExecution timeMemory
1317565foxsergNile (IOI24_nile)C++20
67 / 100
2091 ms4900 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; vector <ll> calculate_costs(vector <int> W, vector <int> A, vector <int> B, vector <int> E) { int n = A.size(); int p[n]; iota(p, p + n, 0); sort(p, p + n, [&](int i, int j) { return W[i] < W[j]; }); vector <int> nW(n); vector <int> nA(n); vector <int> nB(n); for (int i = 0; i < n; ++i) { nW[i] = W[p[i]]; nA[i] = A[p[i]]; nB[i] = B[p[i]]; } W = move(nW); A = move(nA); B = move(nB); vector <ll> R; R.reserve(E.size()); ll sm = 0; for (int i = 0; i < n; ++i) sm += B[i]; for (int i = 0; i < n; ++i) A[i] -= B[i]; for (int D : E) { ll dp[n + 1]; dp[0] = 0; dp[1] = A[0]; if (W[1] - W[0] <= D) { dp[2] = 0; } else { dp[2] = A[0] + A[1]; } for (int i = 2; i < n; ++i) { dp[i + 1] = dp[i] + A[i]; if (W[i] - W[i - 1] > D) continue; dp[i + 1] = min(dp[i + 1], dp[i - 1]); if (W[i] - W[i - 2] > D) continue; dp[i + 1] = min(dp[i + 1], dp[i - 2] + A[i - 1]); } R.push_back(dp[n] + sm); } return R; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...