二分答案求调
  • 板块学术版
  • 楼主huangwei14
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/7 08:36
  • 上次更新2024/8/7 09:50:49
查看原帖
二分答案求调
993389
huangwei14楼主2024/8/7 08:36

题目点这里

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll arr[100010];
ll n,m,k;
bool check(ll x){
	ll now=0,box=1,sum=0;
	for(int i=n-x+1;i<=n;i++){
		if((arr[i]+now)<=k){
			now+=arr[i];
			sum++;
		}else{
			if(box<m){
				box++;
				now=0;
				i--;
			}else{
				break;
			}
		}
	}
	if(sum==x){
		return true;
	}else{
		return false;
	}
}
int main(){
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		cin>>arr[i];
	}
	ll l=1,r=n,ans=l;
	while(l<r){
		ll mid=(l+r)/2;
		if(check(mid)){
			l=mid+1;
			ans=mid;
		}else{
			r=mid-1;
		}
	}
	cout<<ans;
	return 0;
}
2024/8/7 08:36
加载中...