10分tle求助
查看原帖
10分tle求助
345837
空木秋人楼主2020/10/21 20:22

题目就是二分,死活过不了这题。我看不出这代码哪里错了。

int N,M;
int a[1000005];

void find(int low,int high){
    if(low>high) return;
    int mid=(low+high)/2;
    ll sum=0;
    for(int i=0;i<N;++i){
        if(a[i]>mid) sum+=(a[i]-mid);
        if(sum>M) break;
    }
    if(sum==M) {
        printf("%d",mid);
        return;
    }
    else if(sum>M) find(mid,high);
    else find(low,mid);
    return;
}


int main(){
//关闭同步,解除绑定
//std::ios::sync_with_stdio(false);
//std::cin.tie(0);

    int high=-1;
    scanf("%d %d",&N,&M);
    for(int i=0;i<N;i++){
        scanf("%d",&a[i]);
        if(a[i]>high) high=a[i];
    }
    find(0,high+1);
    return 0;
}
2020/10/21 20:22
加载中...