大佬们,为什么我代码就绿了一个点了,应该没错啊
查看原帖
大佬们,为什么我代码就绿了一个点了,应该没错啊
1474218
MoShangYZ楼主2024/11/30 18:04
#include <iostream>
#include <math.h>
using namespace std;
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(false),cin.tie(nullptr)
int N, M;
constexpr int X = 1e5 + 10;
int a[X];

inline bool check(int mid,int M) {
    int sum = 0;
    for (int i = 1; i <= N; i++){
        sum += a[i];
        if (a[i] > mid) return false;
        if (sum > mid){
            M--;
            sum = a[i];
            if (!M){
                return false;
            }
        }
    }
    return true;
}

inline int splitArr() {
    int ans = -1;
    int l = 0, r = 0;
    for (int i = 1; i <= N; i++){
        cin >> a[i];
        r += a[i];
        if (a[i] > l){
            l = a[i];
        }
    }
    int mid = 0;
    while (l <= r){
        mid = (l + r+1) >> 1;
        if (check(mid, M)){
            ans = mid;
            r = mid - 1;
        } else{
            l = mid + 1;
        }
    }
    return ans;
}

signed main() {
    IOS;
    cin >> N >> M;
    int ans = splitArr();
    cout << ans << endl;
    return 0;
}

2024/11/30 18:04
加载中...