应该是check函数出错了,四个wa,救命啊
查看原帖
应该是check函数出错了,四个wa,救命啊
943490
husa_husa楼主2023/3/14 22:02
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
const int NN = 1e5 + 10;
int arr[NN]; 
int N,M;//N是数组长度,M是一共切割多少段
long long sum = 0;//arr[N]里面存的数据很大,所以sum要long long防止爆int
long long arrSum = 0;
bool check(int middle){
    sum = 0;
    int cnt = 0;
    for(int i = 1;i <= N;++i){
        if(arr[i]+sum <= middle){
            sum+=arr[i];
        }else{
            sum = arr[i];
            cnt++;
        }
    }
    if(cnt>M)return false;
    else return true;
}
int main(){
    int left = 0;
    scanf("%d %d",&N,&M); 
    for(int i = 1;i <= N;++i){
        scanf("%d",&arr[i]);
        arrSum += arr[i];
        left = max(left,arr[i]);
    }
    int right = arrSum;
    while(left + 1 < right){
        int middle = (right + left)/2;
        if(check(middle)){
            right = middle;
        }else left = middle;
    }
    
    cout<<right<<endl;
    
    return 0;
}
2023/3/14 22:02
加载中...