Submission #1107813

#TimeUsernameProblemLanguageResultExecution timeMemory
1107813coolboy19521Closing Time (IOI23_closing)C++17
0 / 100
50 ms8180 KiB
#include "closing.h" #include "bits/stdc++.h" using ll = long long; using namespace std; int max_score(int N, int X, int Y, ll K, vector<int> U, vector<int> V, vector<int> W) { ll lo = 0, hi = K; vector<ll> x(N), y(N); for (int i = X - 1; 0 <= i; i --) { x[i] = x[i + 1] + W[i]; } for (int i = X + 1; i < N; i ++) { x[i] = x[i - 1] + W[i - 1]; } for (int i = Y + 1; i < N; i ++) { y[i] = y[i - 1] + W[i - 1]; } for (int i = Y - 1; 0 <= i; i --) { y[i] = y[i + 1] + W[i]; } auto check = [&](ll mm){ ll r = 0; ll c = 0; for (int i = 0; i < N; i ++) { ll mx = max(x[i], y[i]); ll mn = min(x[i], y[i]); if (mx < mm) { r += mx; c ++; } else if (mn < mm) { r += mn; c ++; } } return r <= K; }; while (lo < hi) { ll mi = (lo + hi + 1) / 2; if (check(mi)) { lo = mi; } else { hi = mi - 1; } } int c = 0; ll r = 0; vector<int> vp; for (int i = 0; i < N; i ++) { ll mx = max(x[i], y[i]); ll mn = min(x[i], y[i]); if (mx < lo) { r += mx; c += 2; } else if (mn < lo) { r += mn; c ++; } if (mx == lo) { vp.push_back(-2); } else if (mx != mn && mn == lo) { vp.push_back(-1); } } sort(begin(vp),end(vp)); for (int i : vp) { if (r + lo <= K) { r += lo; c -= i; } } return c; } /* 1 4 0 3 20 0 1 18 1 2 1 2 3 19 */
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...