吃巧克力

来源:互联网 发布:刷爱奇艺会员软件2016 编辑:程序博客网 时间:2024/04/27 14:50

QAQ
二分答案
坑点:
1:最后剩下的巧克力最后吃
2:先输入总巧克力数,然后再输入天数(哭)
3:别忘了搞方案(更傻)

#include <cstdio>#include <iostream>#include <cmath>#include <algorithm>#define ll long longusing namespace std;ll g[99999],t[99999];int n,d;bool check(ll mid){    ll h=0;    int now=1;    for(int i=1;i<=n;i++)    {        h/=2;        while(h<mid&&now<=d)        {            h+=g[now];            t[now++]=i;            //printf("%lld\n",g[]);            if(h>=mid) break;        }        if(h<mid) return 0;    }    for(int i=now;i<=d;i++)     t[i]=n;    return 1;}int main(){    scanf("%d%d",&d,&n);    ll r=0;    for(int i=1;i<=d;i++)     scanf("%lld",&g[i]),r+=g[i];    ll l=0,ans=0;    while(l<=r)    {        ll mid=(l+r)/2;        if(check(mid)) ans=mid,l=mid+1;        else r=mid-1;    }    printf("%lld\n",ans);    check(ans);//最后搞方案    for(int i=1;i<=d;i++)     printf("%lld\n",t[i]);     return 0;}
原创粉丝点击