#include "ricehub.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
int INF=1000000000000000007;
int cost;
vector<int> rice;
vector<int> pref = {0};
bool test(int n) {
//returns true if it's possible to solve with n fields, else false
int mincost=INF;
int len=rice.size();
int fl=(n-1)/2;
int ce=(n)/2;
for (int spos=fl; spos+ce<len; spos++) {
//put at rice[spos]
int cost1 = fl*rice[spos] - (pref[spos] - pref[spos-fl]);
int cost2 = (pref[spos+ce+1] - pref[spos+1]) - ce*rice[spos];
int totcost = cost1+cost2;
mincost=min(mincost,totcost);
//cout << n <<" " << spos <<" " << cost1 << " " <<cost2 <<" " << totcost << endl;
}
return mincost<=cost;
}
int32_t besthub(int32_t R, int32_t L, int32_t X[], long long B) {
cost=B;
for (int i=0; i<R; i++) {
rice.push_back(X[i]);
pref.push_back(pref.back()+X[i]);
}
int lef=1;
int ri=R;
while (lef<ri) {
int m=(lef+ri)/2;
if (test(m)) {
lef=m+1;
ri=ri;
}
else {
lef=lef;
ri=m;
}
}
return lef-1;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
3 |
Correct |
1 ms |
448 KB |
Output is correct |
4 |
Correct |
0 ms |
448 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
1112 KB |
Output is correct |
2 |
Correct |
3 ms |
1116 KB |
Output is correct |
3 |
Incorrect |
12 ms |
5420 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |