这是我代码
题目传送门
#include<bits/stdc++.h>
using namespace std;
long long arr[10005];
long long n,m,io;
bool cheak(long long x){
long long cnt=0,s=0,a=0,x1=0;
for(int i=1;i<=n;i++){
cnt+=arr[i]/x;
a=arr[i]%x;
x1=arr[i+1]%x;
if((a+s)/x>0){
cnt+=(a+s)/x;
a=0;
}
else if((a+x1)/x>0){
cnt+=(a+x1)/x;
arr[i+1]-=x-a;
a=0;
}
s=a;
if(cnt>=m){
return true;
}
}
return false;
}
int main(){
int t;
cin>>t;
while(t--){
cin>>n>>m;
fill(arr+1,arr+1+n,0);
io=0;
for(long long i=1;i<=n;i++){
cin>>arr[i];
io+=arr[i];
}
long long l=1,r=io/m+1,ans=0;
while(l<=r){
long long mid=(l+r)/2;
if(cheak(mid)==true){
ans=mid;
l=mid+1;
}else{
r=mid-1;
}
}
cout<<ans*m<<endl;
}
}
样例第四组错了