AC

名字不要取太长像我这样应该刚刚好  •  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;

}


评论:

请先登录,才能进行评论