为什么不能这样???
查看原帖
为什么不能这样???
1282782
Christian_楼主2024/4/8 10:44

这是AC代码:

#include <bits/stdc++.h>
using namespace std;

const int N=1e5+10;
long long a[N],n,m,l=0,r=0;

int get(long long x){
    long long g=1,s=0;
    for(int i=1;i<=n;i++){
        if((s+a[i])<=x) s+=a[i];
        else{
            s=a[i];
            g++;
        }
    }
    return g;
}

int main(){
    scanf("%lld %lld",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%lld",&a[i]);
        l=max(l,a[i]),r+=a[i];
    }
    while(l<r){
        long long mid=(l+r)>>1;
        if(get(mid)<=m) r=mid;
        else l=mid+1;
    }
    printf("%lld",r);
    return 0;
}

为什么我把二分部分改成: while(l+1<r){ long long mid=(l+r)>>1; if(get(mid)<=m) r=mid; else l=mid; }就只得80分了???

2024/4/8 10:44
加载中...