为什么错了???
查看原帖
为什么错了???
823046
liuzhining楼主2024/1/20 22:06
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10;
ll n,a[N],c,k;

bool pd(ll x){
	ll s=0;
	for(int i=1;i<=n;i++){
		s+=min(a[i],x);
	}
	return s>=k;
} 

int main(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	ll l=0,r=k,s;
	while(l<=r){
		ll zh=(l+r)/2;
		if(pd(zh)){
			r=zh-1;
			s=zh;
		}
		else{
			l=zh+1;
		}
	}
	for(int i=1;i<=n;i++){
		if(a[i]>=s-1){
			c+=s-1;
			a[i]-=(s-1);
		}
		else{
			c+=a[i];
			a[i]=0;
		}
	}
	for(int i=1;i<=n;i++){
		if(c==k){
			break;
		}
		if(a[i]){
			a[i]--;
			c++;
		}
	}
	for(int i=1;i<=n;i++){
		printf("%d ",a[i]);
	}
	return 0;
}


2024/1/20 22:06
加载中...