1 条题解

  • 0
    @ 2017-10-27 21:12:50

    //直接二分答案;
    //但是一本通上只有80;
    //QAQ;
    #include<cstdio>
    #include<stdio.h>
    using namespace std;
    int n,k,z,sum=0,mid;
    int l=1;int r;
    int coc[100100];//coc的值;

    inline void work()
    {
    int cnt=1/*块数*/,tot=0;
    for(register int i=1;i<=n;++i)
    {
    tot+=coc[i];
    if(tot>mid)
    {
    cnt++;
    tot=coc[i];
    }
    }
    if(cnt>k)//如果块数大于k,说明二分的值小了;
    {
    l=mid+1;
    }
    else// 如果块数<k,说明二分的值大了;
    {
    r=mid;
    }
    }

    int main()
    {
    scanf("%d%d",&n,&k);
    for(register int i=1;i<=n;++i)
    {
    scanf("%d",&coc[i]);
    sum+=coc[i];
    }
    r=sum;//如果之分2块,那 直接分一半;
    while(l<r)
    {
    mid=(l+r)>>1;
    work();
    }
    printf("%d",r);
    return 0;
    }

  • 1

信息

难度
4
分类
二分查找 点击显示
标签
递交数
2
已通过
2
通过率
100%
上传者