我连二分答案都不会了……
查看原帖
我连二分答案都不会了……
804607
rainygame楼主2023/5/7 11:52

思路就是二分答案+前缀和,但是只有 2020 分,找不出错……

#include <bits/stdc++.h>
using namespace std;
#define MAXN 100001

int n, m, l, r, mid;
long long maxn;
long long sum[MAXN];

bool check(long long x){
	long long cnt(0), tmp(0), ind(1);
	while (cnt <= x && ind <= n){
		ind = upper_bound(sum+ind, sum+n+1, tmp+x)-sum;
		tmp = sum[ind-1];
		cnt++;
	}
	return cnt > x;
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	cin >> n >> m;
	for (int i(1); i<=n; ++i){
		cin >> sum[i];
		maxn = max(maxn, sum[i]);
		sum[i] += sum[i-1];
	}
	
	l = maxn;
	r = sum[n];
	
	while (l < r){
		mid = (l+r)>>1;
		if (check(mid)) l = mid+1;
		else r = mid;
	}
	
	cout << r;
	
	return 0;
}

2023/5/7 11:52
加载中...