求助大佬
  • 板块学术版
  • 楼主jiangjiangQwQ
  • 当前回复14
  • 已保存回复14
  • 发布时间2023/1/19 18:13
  • 上次更新2023/10/24 03:35:39
查看原帖
求助大佬
590609
jiangjiangQwQ楼主2023/1/19 18:13

我用二分只能对部分样例,请教大佬这题应该怎么做

#include<bits/stdc++.h>
#include<algorithm>
const int MAX=1e6+3;
using namespace std;
int n,m,k,x,y,z,sum,num,ans,max_a,max_sum,min_a=1e9;
string s1,s2,str;
char cc;
bool f,flag;
int h[MAX],l[MAX],a[MAX],l1,r1,mid;
int check(int qp){
	int num=0;
	for(int p=1;p<=n;p++){
		if(a[p]>=qp){
			num+=qp;
		}else break;
	}
	return num;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		max_a=max(max_a,a[i]);
		min_a=min(min_a,a[i]);
	}
	sort(a+1,a+n+1,greater<int>());
	max_sum=n*min_a;
	int l=1,r=max_a;
	while(l<=r){
		int mid=(l+r)>>1,k=check(mid);
//		cout<<mid<<" "<<k<<endl;
		if(k<max_sum) r=mid-1;
		else if(k>max_sum){
			max_sum=k;
			l=mid+1;
		}else break;
	}
	cout<<max_sum;   
	return 0;
}


2023/1/19 18:13
加载中...