求助,9分
查看原帖
求助,9分
556285
FBI_Hu_Tao楼主2023/8/23 22:01
#include<bits/stdc++.h>
using namespace std;
int n,k,sum,ans;
int a[1010],b[1010],t[1010];
bool cmp(int a,int b){
	return a>b;
}
bool check(int x){
	int cnt=0;
	for(int i=1;i<=n;i++){
		int temp=a[i];
		if(a[i]>=x){
			while(temp>=x){
				t[++cnt]=x;
				temp-=x;
			}
		}
		b[i]=temp;
		if(cnt<k/2&&a[i]<x)return false;
	}
	if(cnt<k/2)return false;
	sort(b+1,b+1+n,cmp);
	for(int i=cnt+1,j=1;i<=k;i++,j++)t[i]=b[j];
	for(int i=k/2+1;i<=k;i++)sum+=t[i];
	return true;
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++)cin>>a[i];
	sort(a+1,a+1+n,cmp);
	int l=1,r=a[1];
	while(l<r){
		int mid=(l+r)>>1;
		if(check(mid)){
			memset(b,0,sizeof(b));
			memset(t,0,sizeof(t));
			l=mid+1;
			ans=max(ans,sum);
			sum=0;
		}else r=mid;
	}
	cout<<ans<<endl;
	return 0;
}
2023/8/23 22:01
加载中...