普及2 第2题 有什么问题??

#include<bits/stdc++.h>
using namespace std;
long long n,k,a[100010];
int check(long long mid){
	long long sum=0;
	for(int i=1;i<=n;i++){
		sum+=min(mid,a[i]);
	}return sum<=k;
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++)cin>>a[i];
	long long l=0,r=k+1,mid;
	while(l+1<r){
		mid=(l+r)/2;
		if(check(mid))l=mid;
		else r=mid;
	}long long sum=0;
	for(int i=1;i<=n;i++){
		sum+=min(l,a[i]);
		a[i]=max(a[i]-l,1LL-1);
	}int j=1;
	for(int i=1;i<=k-sum;i++){
		while(a[j]==0)j++;
		a[j]--;
	}for(int i=1;i<=n;i++)cout<<a[i]<<" ";
    return 0;
}
2 个赞

64

2 个赞

我也不会 :sweat_smile: :sweat_smile: :sweat_smile:

3 个赞

@椰子糕 @严志刚

2 个赞

image
你这里a[j]减少了之后
j应该++吧

4 个赞

老师,我j++后就对了

2 个赞

只要a[j]>0就一直在减他?? 不符合题意

4 个赞