60分求助,#2和#4没过
查看原帖
60分求助,#2和#4没过
1218760
Dream_perday楼主2024/3/13 09:42
#include<iostream>
using namespace std;
int main() {
	int n, m, ans[100005] = { 0 }, t, i, l=0, r,mid,c,now,pre,result;
	cin >> n >> m;
	for (i = 1; i <= n; i++) {
		cin >> t;
		if (t > l)
			l =t ;
		ans[i] = ans[i - 1] + t;
	}
	 r = ans[n];
	while (l <= r) {
		mid = (r + l) / 2;
		c = 0;
		pre = 0;
		now = 0;
		for (i = 1; i <= n;) {
			now = i;
			if (now == n) {
				c++;
				i++;
			}
			else if (ans[now] - ans[pre] == mid) {
				c++;
				pre = now;
				i++;
			}
			else if (ans[now] - ans[pre] > mid) {
				c++;
				pre = now - 1;
			}
			else {
				i++;
			}
		}
		if (c > m) {
			l = mid + 1;
		}
		else if (c == m) {
			result = mid;
			r = mid - 1;
		}
		else {
			r = mid - 1;
		}

	}
	cout << result;
}

思路是二分答案加前缀和 希望能帮我看看哪里有问题

2024/3/13 09:42
加载中...