题目:
贝西收到了 N 块巧克力,她会在接下来的 D 天里吃掉这些巧克力,她想制定一个计划,让她每天的快乐度都保持在较高的水品上。 在第一天刚开始的时候,贝西的快乐度为 0。巧克力必须从第一块吃起,不能打乱食用的次序,因为公牛们是按照这个顺序送给她的。吃掉第 i 块巧克力,会让她的快乐度立即增加 A i 。贝西在一天内可以连续食用多块巧克力,也可以一块也不吃。不管如何,当她晚上睡觉之后,快乐度会在半夜减半,如果快乐度是个奇数,则向下取整。请问贝西应该怎样吃巧克力,才能让她在 D 天内最小快乐度最大呢?
输入:
第一行:两个整数 N 和 D,1 ≤ N,D ≤ 50000
第二行到第 N + 1 行:第 i + 1 行有一个整数 H i ,1 ≤ H i ≤ 10^ 6
输出:
单个整数:表示贝西在 D 天内的最小快乐度的最大值
样例输入:
5 5
10
40
13
22
7
样例输出:
24
提示:
第一天吃前两块巧克力,第二天一块都不吃,接下来三天每天各吃一块。
我的代码:
#include<iostream>
#include<algorithm>
using namespace std;
long long n,d;
long long a[50001];
long long ans;
bool check(long long x){
long long tot=0,sum=0;
for(int i=1;i<=d;i++){
sum/=2;
while(sum<x){
tot++;
sum+=a[tot];
if(tot>n) return 0;
}
}
return 1;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>d;
long long sum=0;
long long r=0;
for(int i=1;i<=d;i++){
cin>>a[i];
r+=a[i];
}
long long l=1,mid;
while(l<=r){
mid=(l+r)/2;
if(check(mid)){
ans=mid;
l=mid+1;
}else r=mid-1;
}
cout<<ans;
return 0;
}
开了long long,但还是WA了几个点
求各位大佬帮一下