P7557 [USACO21OPEN] Acowdemia S

典型二分:

#include
using namespace std;
#define int long long
const int N=1e5+10;
int n,a[N],k,l;
bool check(int x) {

	int cnt=0,ans=0;
	for(int i=1; i<=x; i++) {
		if(a[i]>=x) {
			cnt++;
			continue;
		}
		else{
			if(x-a[i]>k)return false;
			else{
			ans=ans+x-a[i];	
			}
		}
	}
	return ans<=k*l;
}
bool cmp(int i,int j) {
	return i>j;
}
void solve() {
	cin>>n>>k>>l;
	for(int i=1; i<=n; i++) cin>>a[i];
	sort(a+1,a+1+n,cmp);
	int l=-1,r=n+1;
	while(l+1>1;
		if(check(mid))l=mid;
		else r=mid;
	}
	cout<>t;
	while(t--) {
		solve();
	}
	return 0;
}



#include
using namespace std;
#define int long long
const int N=1e5+10;
int n,a[N],k,l;
bool check(int x) {

	int cnt=0,ans=0;
	for(int i=1; i<=x; i++) {
		if(a[i]>=x) {
			cnt++;
			continue;
		}
		else{
			if(x-a[i]>k)return false;
			else{
			ans=ans+x-a[i];	
			}
		}
	}
	return ans<=k*l;
}
bool cmp(int i,int j) {
	return i>j;
}
void solve() {
	cin>>n>>k>>l;
	for(int i=1; i<=n; i++) cin>>a[i];
	sort(a+1,a+1+n,cmp);
	int l=-1,r=n+1;
	while(l+1>1;
		if(check(mid))l=mid;
		else r=mid;
	}
	cout<>t;
	while(t--) {
		solve();
	}
	return 0;
}



over~

你可能感兴趣的:(算法,c++)