题目链接
就是二分,第8.0版本的wa代码之后,一通把int换成longlong
好家伙,search函数的参数和返回值忘记换了,爆了int
统统搞成long long
#include<iostream>
#include<string.h>
#include <stdlib.h>//malloc
using namespace std;
typedef long long int ll;
int n,m;
ll a[100005];
ll sum[100005];
bool adequate(ll x){
ll temp=0;//累计一份的花销
ll cnt=1;
for(int i=1;i<=n;i++){
if(temp+a[i]<=x){
temp+=a[i];
}
else{
cnt++;
temp=a[i];
}
}
if(cnt<=m){
return true;
}
else return false;
}
ll search(ll left,ll right){//对满足最大花销的范围找最小值
ll res=0;
while(left<=right){
ll mid=left+(right-left)/2;
if(adequate(mid)){
res=mid;
right=mid-1;
}
else left=mid+1;
}
return res;
}
int main(){//求最大花销,对最大花销可能的范围进行二分,求最小值
cin>>n>>m;
ll maxx=-1;
for(int i=1;i<=n;i++){
cin>>a[i];
sum[i]=a[i]+sum[i-1];
maxx=max(maxx,a[i]);
}
cout<<search(maxx,sum[n]);
return 0;
}