QAQ
二分答案
坑点:
1:最后剩下的巧克力最后吃
2:先输入总巧克力数,然后再输入天数(哭)
3:别忘了搞方案(更傻)
#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
#define ll long long
using 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;
}