问题标题: 酷町堂:2965

0
0
已解决
蒋文瀚
蒋文瀚
新手光能
新手光能

#include<iostream>
using namespace std;
int n,m;
int a[100005];
bool check(int k){
    int cnt=0;
    for(int i=1;i<=n;i++){
        cnt+=a[i]/k;//算出一共可以截多少段木头 
        if(cnt>=m){//如果 
            return true;
        }
    }
    return false;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    int l=0,r=0x3f3f3f3f;
    while(l<r){
        int mid=(l+r)/2;
        if(!check(mid)){
            l=mid+1;
        }else{
            r=mid;
        }
    }
    cout<<l;
    return 0;
}
WA  0

蒋文瀚在2020-12-16 20:41:14追加了内容


0
已采纳
包涵宇
包涵宇
中级天翼
中级天翼
while(l<r){
        int mid=(l+r)/2;
        if(!check(mid)){
            l=mid+1;
        }else{
            r=mid;
        }
    }
    cout<<l;

改为

while(l<r){
        int mid=(l+r+1)/2;
        if(check(mid))l=mid;
        else r=mid-1;
    }
    if(check(l))cout<<l;
    else cout<<0;

即可ac

错误分析:

1.若木材无法切割为m及以上份,要减少切割的长度

2.如果连1cm长的小段都切不出来,输出0

我要回答