名字不要取太长像我这样应该刚刚好 • 19天前
#include <bits/stdc++.h> #define int long long using namespace std; const int N = 5e4 + 5; int n, d; int h[N];
int solve(int mid) {
int a = 0, day = 0;
for (int i = 1; i <= n; i++) {
a += h[i];
while (a >= mid) {
day++;
a /= 2;
}
}
return day;
}
signed main() {
cin >> n >> d;
int left = 0, right = 0;
for (int i = 1; i <= n; i++) {
cin >> h[i];
right += h[i];
}
int ans = 0;
while (left <= right) {
int mid = (left + right) / 2;
if (solve(mid) >= d) {
left = mid + 1;
ans = max(ans, mid);
} else
right = mid - 1;
}
cout << ans << endl;
int m = 0, day = 0;
for (int i = 1; i <= n; i++) {
cout << min(d, day + 1) << endl;
m += h[i];
while (m >= ans && day < d) {
day++;
m /= 2;
}
}
return 0;
}
评论:
请先登录,才能进行评论