
二分答案的题目,求代码。
这是本人的代码,只对了一个点
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[50005],n,d,cnt[50005]={0},t=0;
int cheak(int mid) {
t=0;
int sum=0,cnt2=0,day=0;
for(int i=1; i<=n; i) {
while(sum<=mid){
sum+=a[i++];
cnt2++;
}
cnt[++t]=cnt2; cnt2=0;
day++;
sum/=2;
}
return day;
}
void sovle() {
cin>>n>>d;
for(int i=1; i<=n; i++) cin>>a[i];
int l=0,r=1<<30;
while(l<r-1) {
int mid=l+r>>1;
if(cheak(mid)>=d) l=mid;
else r=mid;
}
cout<<l<<endl;
int tt=1;
for(int i=1;i<=t;i++){
for(int j=1;j<=cnt[i];j++)
cout<<tt<<endl;
tt+=cnt[i];
}
}
signed main() {
std::ios::sync_with_stdio();
sovle();
return 0;
}
跪谢大佬