为何用int能过而long long过不去最后一个测试点
查看原帖
为何用int能过而long long过不去最后一个测试点
115940
Is_TuTouYa楼主2021/2/25 18:49

ET

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>

using namespace std;
const int N = 1e5+10;
long long n,m,a[N],b[N];

int max(int a,int b){
    return a>b?a:b;
}

bool check(int mid){
    long long tot=0,num=0;
    for(int i=1;i<=n;i++)
    {
        if(tot+a[i]<=mid)tot+=a[i];
        else tot=a[i],num++;
    }
    return num<m;
}

int main(){
    cin >> n >> m;
    long long l = 1,r = 0;
    for(int i = 1;i <= n;i++){cin >> a[i]; r+=a[i]; l = max(l,a[i]);}
    while(l < r){
        long long mid = (l+r)/2;
        if(check(mid)) r = mid;
        else l = mid+1;
    }
    cout << l << endl;
    return 0;
}
2021/2/25 18:49
加载中...