Submission #872499

#TimeUsernameProblemLanguageResultExecution timeMemory
872499StefanL2005Rice Hub (IOI11_ricehub)C++14
68 / 100
134 ms4444 KiB
#include <bits/stdc++.h> #include "ricehub.h" using namespace std; #define ll long long int solve(int poz, int R, int B, vector<int> &X) { int c1 = poz - 1, c2 = poz + 1; bool done_change = true; int nr = 1; while (done_change) { done_change = false; if (c1 < 0 && c2 >= R) break; if (c1 >= 0 && (c2 >= R || X[poz] - X[c1] <= X[c2] - X[poz])) { nr++; done_change = true; B -= (X[poz] - X[c1]); c1--; } else if (c2 < R && (c1 < 0 || X[c2] - X[poz] < X[poz] - X[c1])) { nr++; done_change = true; B -= (X[c2] - X[poz]); c2++; } if (B < 0) { nr--; done_change = false; } } return nr; } int besthub(int R, int L, int V[], ll B) { vector<int> X(R); for (int i = 0; i < R; i++) X[i] = V[i]; /*vector<ll> dp(R); for (int i = 1; i < R; i++) dp[0] += (X[i] - X[0]); ll sum = dp[0]; int right = R, left = 0; for (int i = 1; i < R; i++) { right--; left++; if (X[i] == X[i - 1]) { dp[i] = dp[i - 1]; continue; } int dif = X[i] - X[i - 1]; sum = sum - dif * right + dif * left; dp[i] = sum; } ll Min = dp[0]; int poz = 0; for (int i = 0; i < R; i++) if (dp[i] < Min) { Min = dp[i]; poz = i; } */ vector<int> best(R); for (int i = 0; i < R; i++) best[i] = solve(i, R, B, X); int Max = best[0]; for (int i = 0; i < R; i++) Max = max(Max, best[i]); return Max; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...