P4998求调,20分,码风优良
  • 板块学术版
  • 楼主Mr_yeh
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/4 09:57
  • 上次更新2024/9/4 10:26:29
查看原帖
P4998求调,20分,码风优良
852827
Mr_yeh楼主2024/9/4 09:57

题目传送门

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=(int)2e7+10;
int n,k,t,ans;
int a[N],sum[N],b[N];
int find(int x){
	int l=1,r=n;
	while(l<=r){
		int mid=(l+r)/2;
		if(x>a[mid]){
			l=mid+1;
		}else{
			r=mid-1;
		}
	}
	return l;
}
signed main(){
	scanf("%lld%lld",&n,&k);
	for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i];
	for(int i=1e6*-1;i<=1e7;i++){
		int pos=find(i);
		b[++t]=(pos-1)*i-sum[pos-1]+sum[n]-sum[pos]-(n-pos)*i;
	}
	sort(b+1,b+t+1);
	for(int i=1;i<=k;i++){
		ans+=b[i];
	}
	printf("%lld\n",ans);
	return 0;
}

2024/9/4 09:57
加载中...