为什么拿样例做答案是 2 2 3 4 5
查看原帖
为什么拿样例做答案是 2 2 3 4 5
668320
fufuQAQ楼主2022/5/2 16:39
cpp
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N=1000010;
ll a[N],ans,maxn,n,c,k,sum,d,j; 
ll day[N],l,r;
//std::ios::sync_with_stdio(false);//最好加上,小技巧,省时间(加上以后cin比scanf还快你信吗)。

bool judge(int x)
{
    sum=0;  j=0;
    for(int i=1;i<=d;i++)
    {
    	sum/=2;
    	cout<<"sum="<<sum<<endl;
    	while(sum<x)
		{
			if(j<=n)
			{
				j++;
				sum+=a[j];
				cout<<"sum1="<<sum<<endl; 
				day[i]=j;//记录每天吃了多少块巧克力 
			}
			else   return 0;
		}
//		day[i]=j;//记录每天吃了多少块巧克力 
	}
    return 1;
}
//    	if(sum<x)
//		{
//		    sum+=a[j];
//		    j++;
//	    }
//    	else   sum=sum/2;
////    	cout<<"j="<<j<<" "<<"i="<<i<<endl;
//    	pos[i]=j-1;

int main()
{
    cin>>n>>d; 
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        maxn+=a[i];
    }
	l=0;   r=maxn;
	while(l<=r)//二分查找每次需要的时间 
	{
		int mid=(l+r)>>1;
        cout<<"mid="<<mid<<endl;
        //找到返回1   没找到返回0  //错误点1:判断都判断错了 
		if(judge(mid))
		{
		    l=mid+1;
//		    ans=mid;
		}
		else r=mid-1;
	}
	cout<<r<<endl;
//	judge(r);
	for(int i=1;i<=d;i++)
	{
        cout<<day[i]<<endl;
	}
	return 0;
}
2022/5/2 16:39
加载中...