喵
  • 板块灌水区
  • 楼主lucy2012
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/8/6 20:55
  • 上次更新2024/8/6 21:55:39
查看原帖
喵
1252442
lucy2012楼主2024/8/6 20:55

代码80分:

#include<bits/stdc++.h>
using namespace std;
long long n,k,a[100010],sum[100010],ziro[100010],l,r,mid,ans=1e9; 
int find(int x){
	int l=1,r=n,mid;
	while(l<r){
		mid=(l+r)/2;
		if(a[mid]>=x){
			r=mid;
		}else{
			l=mid+1;
		}
	}
	return r;
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++){
		sum[i]=a[i]+sum[i-1];
		ziro[i]=ziro[i-1];
		if(a[i]==0){
			ziro[i]++;
		}
	}
	for(int i=1;i<=n;i++){
		if(!a[i]){
			continue;
		}
		long long t=a[i],num=find(t);
		long long sun=(sum[n]-sum[num-1])-(n-num+1)*t+sum[num-1]+(num-1-ziro[num-1])*k;
        ans=min(ans,sun); 
	}
	cout<<ans;
	return 0;
}
2024/8/6 20:55
加载中...