Description
Solution
二分答案
Code
int n,c,t;
int a[maxn];
bool check(int tim) {
int tot = 0, num = 1;
for(int i = 1;i <= n;++i) {
if((int)ceil(1.0*(tot + a[i]) / t) <= tim) tot += a[i];
else {num++, tot = 0;i--;}
if(num > c) return false;
}
return true;
}
int main() {
scanf("%d%d%d",&n,&c,&t);
for(int i = 1;i <= n;++i) {
scanf("%d",&a[i]);
}
int l = 1, r = 1e9;
while(l < r) {
int mid = (l + r) >> 1;
if(check(mid)) r = mid;
else l = mid + 1;
}
printf("%d\n",l);
return 0;
}