求题
  • 板块灌水区
  • 楼主Star_F
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/8/16 15:19
  • 上次更新2023/11/3 03:22:26
查看原帖
求题
1014580
Star_F楼主2023/8/16 15:19

二分答案的题目,求代码。

这是本人的代码,只对了一个点

#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;
}

跪谢大佬

2023/8/16 15:19
加载中...